TablistManager.java (3065B)
1 package de.oshgnacknak.PexTabChat; 2 3 import java.lang.reflect.Field; 4 import java.util.ArrayList; 5 import java.util.Arrays; 6 import java.util.Comparator; 7 import java.util.HashMap; 8 import java.util.List; 9 10 import org.bukkit.Bukkit; 11 import org.bukkit.craftbukkit.v1_8_R3.entity.CraftPlayer; 12 import org.bukkit.entity.Player; 13 import org.bukkit.scoreboard.Scoreboard; 14 15 import net.md_5.bungee.api.ChatColor; 16 import net.minecraft.server.v1_8_R3.IChatBaseComponent; 17 import net.minecraft.server.v1_8_R3.IChatBaseComponent.ChatSerializer; 18 import net.minecraft.server.v1_8_R3.PacketPlayOutPlayerListHeaderFooter; 19 import ru.tehkode.libs.com.google.gson.JsonParseException; 20 import ru.tehkode.permissions.PermissionGroup; 21 import ru.tehkode.permissions.PermissionUser; 22 import ru.tehkode.permissions.bukkit.PermissionsEx; 23 24 public class TablistManager { 25 26 // SIGLETON 27 public static final TablistManager global = new TablistManager(); 28 29 private Scoreboard sb; 30 31 private HashMap<String, String> sbTeams = new HashMap<>(); 32 33 private TablistManager() { 34 } 35 36 public void update() { 37 sb = Main.getPlugin().getServer().getScoreboardManager().getNewScoreboard(); 38 39 List<PermissionGroup> groups = new ArrayList<PermissionGroup>(PermissionsEx.getPermissionManager().getGroupList()); 40 groups.sort(new Comparator<PermissionGroup>() { 41 public int compare(PermissionGroup a, PermissionGroup b) { 42 return a.getRank() - b.getRank(); 43 }; 44 }); 45 46 for (int i = 0; i < groups.size(); ++i) { 47 PermissionGroup g = groups.get(i); 48 49 String tName = String.format("%010d", i); 50 51 sb.registerNewTeam(tName); 52 sb.getTeam(tName).setPrefix(ChatColor.translateAlternateColorCodes('&', g.getPrefix())); 53 sb.getTeam(tName).setSuffix(ChatColor.translateAlternateColorCodes('&', g.getSuffix())); 54 55 sbTeams.put(g.getName(), tName); 56 } 57 } 58 59 @SuppressWarnings({ "deprecation" }) 60 public void addPlayer(Player p) { 61 PermissionUser u = PermissionsEx.getUser(p); 62 63 sb.getTeam(sbTeams.get(u.getGroups()[0].getName())).addPlayer(p); 64 System.out.println("Groups: " + Arrays.toString(u.getGroupNames())); 65 66 for (Player all : Bukkit.getOnlinePlayers()) { 67 all.setScoreboard(sb); 68 } 69 70 } 71 72 public static void sendTabHeaderAndFooter(Player p, String header, String footer) { 73 74 PacketPlayOutPlayerListHeaderFooter tabPacket = null; 75 try { 76 IChatBaseComponent tabHeader = ChatSerializer.a("{'text':'" + header + "'}"); 77 IChatBaseComponent tabFooter = ChatSerializer.a("{'text':'" + footer + "'}"); 78 79 tabPacket = new PacketPlayOutPlayerListHeaderFooter(tabHeader); 80 Field field = tabPacket.getClass().getDeclaredField("b"); 81 field.setAccessible(true); 82 field.set(tabPacket, tabFooter); 83 } catch (JsonParseException e) { 84 System.err.println( 85 "Cannot changer headers and footers. Please only use this syntax(header: '\n&cbla\n' within config.yml's tablist section"); 86 e.printStackTrace(); 87 } catch (Exception e) { 88 e.printStackTrace(); 89 } finally { 90 if (tabPacket != null) { 91 ((CraftPlayer) p).getHandle().playerConnection.sendPacket(tabPacket); 92 } 93 } 94 } 95 96 }