Skip to content

Instantly share code, notes, and snippets.

@TheMolkaPL
Last active July 6, 2023 23:25
Show Gist options
  • Save TheMolkaPL/7623034 to your computer and use it in GitHub Desktop.
Save TheMolkaPL/7623034 to your computer and use it in GitHub Desktop.
Connecting players to another BungeeCord server with PluginMessage
package pl.themolka.bungee;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import org.bukkit.Bukkit
import org.bukkit.entity.Player;
import org.bukkit.event.Listener;
import org.bukkit.plugin.Plugin;
import org.bukkit.plugin.java.JavaPlugin;
import pl.themolka.bungee.PlayerChangeServerEvent;
/**
* author TheMolkaPL
*/
public class BungeeConnector extends JavaPlugin {
private static Plugin instance;
public void onEnable() {
instance = this;
getServer().getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");
}
/**
* Connects a player to a server
*
* @author TheMolkaPL
*
* @param player Player which you want to connect
* @param serverName Server's name to display in the message
* @param serverAddress Server's BungeeCord address to connect
*/
public static void connect(Player player, String serverName, String serverAddress) {
PlayerChangeServerEvent event = new PlayerChangeServerEvent(player, serverName, serverAddress);
Bukkit.getPluginManager().callEvent(event);
if(!event.isCancelled()) {
ByteArrayOutputStream b = new ByteArrayOutputStream();
DataOutputStream out = new DataOutputStream(b);
if(event.getMessage() != null) {
player.sendMessage(event.getMessage());
}
try {
out.writeUTF("Connect");
out.writeUTF(event.getServerAddress());
} catch(IOException ex) {}
Bukkit.getLogger().info("Connecting " + player.getName() + " to " + serverName + "...");
player.sendPluginMessage(instance, "BungeeCord", b.toByteArray());
}
}
}
package pl.themolka.bungee;
import org.bukkit.ChatColor;
import org.bukkit.entity.Player;
import org.bukkit.event.Cancellable;
import org.bukkit.event.Event;
import org.bukkit.event.HandlerList;
/**
* author TheMolkaPL
*/
public class PlayerChangeServerEvent extends Event implements Cancellable {
private static final HandlerList handlers = new HandlerList();
private boolean cancelled;
private Player playerPla;
private String serverStr;
private String serverAddressStr;
private String messageStr = ChatColor.GRAY + "Connecting to server " + ChatColor.GOLD + null + ChatColor.GRAY + "...";
public PlayerChangeServerEvent(Player player, String server, String serverAddress) {
playerPla = player;
serverStr = server;
serverAddressStr = serverAddress;
messageStr = ChatColor.GRAY + "Connecting to server " + ChatColor.GOLD + server + ChatColor.GRAY + "...";
}
@Override
public HandlerList getHandlers() {
return handlers;
}
public static HandlerList getHandlerList() {
return handlers;
}
@Override
public boolean isCancelled() {
return cancelled;
}
@Override
public void setCancelled(boolean cancel) {
cancelled = cancel;
}
public String getMessage() {
return messageStr;
}
public Player getPlayer() {
return playerPla;
}
public String getServer() {
return serverStr;
}
public String getServerAddress() {
return serverAddressStr;
}
public void setMessage(String message) {
messageStr = message;
}
public void setServer(String server) {
serverStr = server;
}
public void setServerAddress(String serverAddress) {
serverAddressStr = serverAddress;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment