Created
March 27, 2014 18:58
-
-
Save TruDan/9815362 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
* 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