24package com.dreamfirestudios.dreamcore.DreamMessagingChannel;
26import com.google.common.io.ByteArrayDataOutput;
27import com.google.common.io.ByteStreams;
28import org.bukkit.Bukkit;
29import org.bukkit.entity.Player;
30import org.bukkit.plugin.java.JavaPlugin;
32import java.util.Objects;
33import java.util.logging.Level;
70 Objects.requireNonNull(plugin,
"plugin");
71 Objects.requireNonNull(listener,
"listener");
72 Bukkit.getMessenger().registerOutgoingPluginChannel(plugin,
BUNGEE_CHANNEL);
73 Bukkit.getMessenger().registerIncomingPluginChannel(plugin,
BUNGEE_CHANNEL, listener);
74 plugin.getLogger().log(Level.INFO,
"Registered BungeeCord plugin messaging channels.");
82 Objects.requireNonNull(plugin,
"plugin");
83 Bukkit.getMessenger().unregisterOutgoingPluginChannel(plugin);
84 Bukkit.getMessenger().unregisterIncomingPluginChannel(plugin);
85 plugin.getLogger().log(Level.INFO,
"Unregistered all plugin messaging channels.");
99 public static void connect(JavaPlugin plugin, Player player, String serverName) {
100 if (!preflight(plugin, player))
return;
101 ByteArrayDataOutput out = ByteStreams.newDataOutput();
103 out.writeUTF(serverName);
104 player.sendPluginMessage(plugin,
BUNGEE_CHANNEL, out.toByteArray());
117 if (!preflight(plugin, player))
return;
118 ByteArrayDataOutput out = ByteStreams.newDataOutput();
120 out.writeUTF(serverName);
121 player.sendPluginMessage(plugin,
BUNGEE_CHANNEL, out.toByteArray());
132 public static void forward(JavaPlugin plugin, Player player, String targetServer, String subChannel,
byte[] payload) {
133 if (!preflight(plugin, player))
return;
134 ByteArrayDataOutput out = ByteStreams.newDataOutput();
136 out.writeUTF(targetServer);
137 out.writeUTF(subChannel);
138 out.writeShort(payload.length);
140 player.sendPluginMessage(plugin,
BUNGEE_CHANNEL, out.toByteArray());
156 public static void forwardUtf(JavaPlugin plugin, Player player, String targetServer, String subChannel, String message) {
157 if (!preflight(plugin, player))
return;
158 ByteArrayDataOutput msg = ByteStreams.newDataOutput();
159 msg.writeUTF(message ==
null ?
"" : message);
160 forward(plugin, player, targetServer, subChannel, msg.toByteArray());
169 private static boolean preflight(JavaPlugin plugin, Player player) {
170 if (plugin ==
null) {
171 Bukkit.getLogger().log(Level.SEVERE,
"DreamPluginMessage: plugin is null.");
174 if (player ==
null) {
175 plugin.getLogger().log(Level.WARNING,
"DreamPluginMessage: player is null.");
178 if (!Bukkit.getMessenger().isOutgoingChannelRegistered(plugin,
BUNGEE_CHANNEL)) {
179 plugin.getLogger().log(Level.WARNING,
"Outgoing channel '" +
BUNGEE_CHANNEL +
"' not registered for this plugin.");
Utility class for handling BungeeCord plugin messaging channels in Paper/Spigot.
static final String SUB_PLAYER_COUNT
static final String SUB_FORWARD
static void connect(JavaPlugin plugin, Player player, String serverName)
Connects a player to another BungeeCord server.
static void unregister(JavaPlugin plugin)
Unregisters all plugin messaging channels for this plugin.
static final String SUB_FORWARD_TO_PLAYER
static void register(JavaPlugin plugin, PluginMessageLibrary listener)
Registers this plugin to listen and send on the BungeeCord channel.
static void requestPlayerCount(JavaPlugin plugin, Player player, String serverName)
Requests player count of a target server.
static final String SUB_CONNECT
static final String BUNGEE_CHANNEL
Outer Bungee channel name (constant).
static void forward(JavaPlugin plugin, Player player, String targetServer, String subChannel, byte[] payload)
Forwards raw payload to another server or ALL servers.
static void forwardUtf(JavaPlugin plugin, Player player, String targetServer, String subChannel, String message)
Forwards a single UTF string to another server.
Base listener for BungeeCord plugin messages (channel: "BungeeCord").