Skip to content

Instantly share code, notes, and snippets.

@RoboMWM
Forked from aikar/EmpireBungeeListener.java
Created November 14, 2016 17:44
Show Gist options
  • Save RoboMWM/aa05101e8553130cc91175b2742211f6 to your computer and use it in GitHub Desktop.
Save RoboMWM/aa05101e8553130cc91175b2742211f6 to your computer and use it in GitHub Desktop.
package com.empireminecraft;
import net.md_5.bungee.ServerConnection;
import net.md_5.bungee.UserConnection;
import net.md_5.bungee.api.ProxyServer;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.event.ProxyPingEvent;
import net.md_5.bungee.api.event.ServerConnectEvent;
import net.md_5.bungee.api.event.ServerConnectedEvent;
import net.md_5.bungee.api.plugin.Listener;
import net.md_5.bungee.event.EventHandler;
import java.util.Random;
import java.util.concurrent.TimeUnit;
import java.util.regex.Pattern;
import static net.md_5.bungee.api.ServerPing.PlayerInfo;
public class EmpireBungeeListener implements Listener {
private static final Pattern NEWLINE = Pattern.compile("\n");
private static final Random RAND = new Random();
@EventHandler
public void onConnected(ServerConnectedEvent event) {
String serverName = event.getServer().getInfo().getName();
String header = EmpireBungeeInfo.getConfig("tablist_header");
String footer = EmpireBungeeInfo.getConfig("tablist_footer");
int padSize = 80;
if (header != null && footer != null) {
header = header.replaceAll("%server%", serverName.toUpperCase());
final String[] headerLines = NEWLINE.split(header);
final String[] footerLines = NEWLINE.split(footer);
for (int i = 0; i < headerLines.length; i++) {
headerLines[i] = BungeeUtil.pad(headerLines[i], padSize);
}
for (int i = 0; i < footerLines.length; i++) {
footerLines[i] = BungeeUtil.pad(footerLines[i], padSize);
}
event.getPlayer().setTabHeader(
BungeeUtil.colorCmp(BungeeUtil.join(headerLines, "\n")),
BungeeUtil.colorCmp(BungeeUtil.join(footerLines, "\n"))
);
}
}
@EventHandler
public void onSwitch(final ServerConnectEvent event) {
final ProxiedPlayer player = event.getPlayer();
final ServerConnection server = (ServerConnection) player.getServer();
final UserConnection con = (UserConnection) player;
if (server == null) {
return;
}
if (event.getTarget().getName().equals(player.getServer().getInfo().getName())) {
player.sendMessage(BungeeUtil.color("&cYou are already connected to this server."));
event.setCancelled(true);
return;
}
if (!server.isObsolete()) {
server.setObsolete(true);
event.setCancelled(true);
server.disconnect("Switching Servers");
ProxyServer.getInstance().getScheduler().schedule(EmpireBungee.getPlugin(), new Runnable() {
@Override
public void run() {
con.connectNow(event.getTarget());
}
}, 700, TimeUnit.MILLISECONDS);
}
}
@EventHandler
public void onPing(ProxyPingEvent event) {
final ServerPing response = event.getResponse();
final ServerPing.Players players = response.getPlayers();
players.setOnline(EmpireBungeeInfo.getOnline());
String ip = event.getConnection().getAddress().getAddress().getHostAddress();
String lastName = EmpireBungeeInfo.getNameByIp(ip);
final String[] descsplit = NEWLINE.split(response.getDescription());
String[] desc1 = NEWLINE.split(EmpireBungeeInfo.getConfig("bungee_desc1"));
if (desc1 == null) {
desc1 = new String[] {descsplit[0]};
}
String[] desc2 = NEWLINE.split(EmpireBungeeInfo.getConfig("bungee_desc2"));
if (desc2 == null) {
desc2 = new String[] {descsplit[1]};
}
String desc1line = desc1[RAND.nextInt(desc1.length)];
String desc2line = desc2[RAND.nextInt(desc2.length)];
if (lastName == null) {
lastName = "Player";
}
desc1line = desc1line.replaceAll("%player%", lastName);
desc2line = desc2line.replaceAll("%player%", lastName);
response.setDescription(
BungeeUtil.color(desc1line) +"\n" +
BungeeUtil.color(desc2line)
);
String playerText = EmpireBungeeInfo.getConfig("bungee_playertext");
if (playerText != null) {
final String[] lines = NEWLINE.split(playerText);
PlayerInfo[] infos = new PlayerInfo[lines.length];
for (int i = 0; i < lines.length; i++) {
infos[i] = new PlayerInfo(BungeeUtil.color(lines[i]), String.valueOf(i));
}
players.setSample(infos);
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment