PexTabChat

A Bukkit-Plugin based around the PermissionEx-Api. The core features are a colored tablist and a chatformat.
git clone git://git.oshgnacknak.de/PexTabChat.git
Log | Files | Refs | README | LICENSE

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 }