Skip to content

Instantly share code, notes, and snippets.

@TruDan
Created March 27, 2014 18:58
Show Gist options
  • Save TruDan/9815362 to your computer and use it in GitHub Desktop.
Save TruDan/9815362 to your computer and use it in GitHub Desktop.
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
import eu.scrayos.proxytablist.ProxyTablist;
import eu.scrayos.proxytablist.api.Variable;
import java.util.HashMap;
import java.util.Iterator;
import java.util.regex.MatchResult;
import java.util.regex.Pattern;
import net.md_5.bungee.BungeeCord;
import net.md_5.bungee.api.Callback;
import net.md_5.bungee.api.ServerPing;
import net.md_5.bungee.api.config.ServerInfo;
import net.md_5.bungee.api.connection.ProxiedPlayer;
import net.md_5.bungee.api.connection.Server;
/**
*
* @author Dan
*/
public class ServerPlayer implements Variable {
private HashMap<ServerInfo, Iterator<ProxiedPlayer>> serverPlayerList = new HashMap<ServerInfo, Iterator<ProxiedPlayer>>();
private static final Pattern pattern = Pattern.compile("\\{serverPlayer\\}");
private int lastRefreshId = -1;
private int lastSlot;
private ProxiedPlayer lastPlayer;
public ServerPlayer() {
(new Thread() {
public void run() {
while(true) {
try {
for (ServerInfo serverInfo : BungeeCord.getInstance().getServers().values()) {
pingServer(serverInfo);
}
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println("Interrupted ping Thread");
e.printStackTrace();
}
}
}
}).start();
}
private void pingServer(final ServerInfo serverInfo) {
serverInfo.ping(new Callback<ServerPing>() {
@Override
public void done(ServerPing serverPing, Throwable throwable) {
}
});
}
@Override
public Pattern getPattern() {
return pattern;
}
@Override
public void setRefreshId(int refreshId) {
if (lastRefreshId != refreshId) {
lastRefreshId = refreshId;
serverPlayerList.clear();
}
lastSlot = 0;
}
@Override
public boolean hasUpdate(int slot, ProxiedPlayer proxiedPlayer) {
if (slot != lastSlot || lastPlayer != proxiedPlayer) {
lastSlot = slot;
lastPlayer = proxiedPlayer;
return true;
}
return false;
}
@Override
public void setMatchResult(MatchResult matchResult) {
// Do nothing
}
@Override
public boolean isForGlobalTablist() {
return false;
}
@Override
public String getText(Short ping) {
if(lastPlayer == null) {
return "";
}
Server server = lastPlayer.getServer();
if(server == null) {
return "";
}
ServerInfo serverInfo = server.getInfo();
if (serverInfo == null) {
return "";
}
if (!serverPlayerList.containsKey(serverInfo)) {
serverPlayerList.put(serverInfo, serverInfo.getPlayers().iterator());
}
if (!serverPlayerList.get(serverInfo).hasNext()) {
return "";
}
ProxiedPlayer player = serverPlayerList.get(serverInfo).next();
ping = (new Integer(player.getPing())).shortValue();
return formatName(player);
}
public String formatName(ProxiedPlayer p) {
StringBuilder name = new StringBuilder();
//Check for Prefix
if(ProxyTablist.getInstance().getConfig().contains("variable.player.prefix." + p.getName())) {
name.append(ProxyTablist.getInstance().getConfig().getString("variable.player.prefix." + p.getName(), ""));
}
for (String c : new String[]{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "l", "m", "n", "o", "k", "r"}) {
if (p.hasPermission("proxy.tablist." + c)) {
name.append("§");
name.append(c);
}
}
name.append(p.getName());
return name.toString();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment