Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package de.creepit.creepcore.util;
- import java.lang.reflect.Constructor;
- import java.lang.reflect.Field;
- import java.util.Collection;
- import java.util.HashMap;
- import java.util.HashSet;
- import java.util.Map.Entry;
- import java.util.Set;
- import org.bukkit.Bukkit;
- import org.bukkit.entity.Player;
- import de.creepit.creepcore.CreepCore;
- public class NameTagUtil{
- private static HashMap<String, Object> teams = new HashMap<>();
- @SuppressWarnings("rawtypes")
- public static void updateTeams() {
- for (Entry entry : teams.entrySet()) {
- for (Player all : Bukkit.getOnlinePlayers()) {
- try {
- Constructor<?> scoreboardTeamConstructor = getNMSClass("PacketPlayOutScoreboardTeam")
- .getConstructor(getNMSClass("ScoreboardTeam"), int.class);
- sendPacket(all, scoreboardTeamConstructor.newInstance(entry.getValue(), 1));
- sendPacket(all, scoreboardTeamConstructor.newInstance(entry.getValue(), 0));
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
- }
- @SuppressWarnings("unchecked")
- public static void removeFromTeam(Player player) {
- teams.entrySet().forEach(entry -> {
- Object packet = teams.get(entry.getKey());
- try {
- Field f = packet.getClass().getDeclaredField("c");
- f.setAccessible(true);
- Set<String> list = new HashSet<>();
- list.addAll((Collection<? extends String>) f.get(packet));
- if (list.contains(player.getName())) {
- list.remove(player.getName());
- setField(packet, "c", list);
- teams.put(entry.getKey(), packet);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- });
- }
- public static void addToTeam(Player player) {
- removeFromTeam(player);
- String suffix = String.valueOf(" §8●§7 ");
- if (player.hasPermission("creepit.core.administrator")) {
- setPlayer(player, "administrator");
- player.setPlayerListName("§4Admin" + suffix + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.seniormoderator")) {
- setPlayer(player, "srmoderator");
- player.setPlayerListName("§cSr-Mod" + suffix + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.moderator")) {
- setPlayer(player, "moderator");
- player.setPlayerListName("§cMod" + suffix + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.supporter")) {
- setPlayer(player, "supporter");
- player.setPlayerListName("§9Sup" + suffix + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.headbuilder")) {
- setPlayer(player, "headbuilder");
- player.setPlayerListName("§2Builder" + suffix + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.builder")) {
- setPlayer(player, "builder");
- player.setPlayerListName("§eBuilder" + suffix + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.developer")) {
- setPlayer(player, "developer");
- player.setPlayerListName("§dDev" + suffix + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.designer")) {
- setPlayer(player, "designer");
- player.setPlayerListName("§3Design" + suffix + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.youtuber")) {
- setPlayer(player, "youtuber");
- player.setPlayerListName("§5" + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.premiumplus")) {
- setPlayer(player, "premiumplus");
- player.setPlayerListName("§6" + player.getName());
- return;
- } else if (player.hasPermission("creepit.core.premium")) {
- setPlayer(player, "premium");
- player.setPlayerListName("§6" + player.getName());
- return;
- } else {
- setPlayer(player, "spieler");
- player.setPlayerListName("§a" + player.getName());
- return;
- }
- }
- public static void initScoreboardTeams() {
- String suffix = " §8●§7 ";
- try {
- Constructor<?> boardConstructor = getNMSClass("Scoreboard").getConstructor();
- Object board = boardConstructor.newInstance();
- init("000Administrator", "administrator", "§4Admin" + suffix, board);
- init("001SrModerator", "srmoderator", "§cSr-Mod" + suffix, board);
- init("003Moderator", "moderator", "§cMod" + suffix, board);
- init("004Supporter", "supporter", "§9Sup" + suffix, board);
- init("005HeadBuilder", "headbuilder", "§2Builder" + suffix, board);
- init("006Builder", "builder", "§eBuilder" + suffix, board);
- init("007Developer", "developer", "§dDev" + suffix, board);
- init("008Designer", "designer", "§3Design" + suffix, board);
- init("009YouTuber", "youtuber", "§5", board);
- init("010PremiumPlus", "premiumplus", "§6", board);
- init("011Premium", "premium", "§6", board);
- init("012Spieler", "spieler", "§a", board);
- } catch (Exception e) {
- e.printStackTrace();
- Bukkit.getConsoleSender().sendMessage(CreepCore.getInstance().getConfiguration().getPrefix() + "§4Die Scoreboard Teams konnten nicht initialisiert werden!");
- }
- }
- private static void init(String teamname, String HashMapName, String prefix, Object board) {
- try {
- Constructor<?> teamConstructor = getNMSClass("ScoreboardTeam").getConstructor(getNMSClass("Scoreboard"),
- String.class);
- Object packet = teamConstructor.newInstance(board, teamname);
- Object enumVisibility = getNMSClass("ScoreboardTeamBase").getDeclaredClasses()[0].getField("ALWAYS")
- .get(null);
- setField(packet, "j", enumVisibility);
- setField(packet, "e", prefix);
- teams.put(HashMapName, packet);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private static void setPlayer(Player p, String HashMapName) {
- Object packet = teams.get(HashMapName);
- try {
- Field f = packet.getClass().getDeclaredField("c");
- f.setAccessible(true);
- Set<String> list = new HashSet<>();
- list.addAll((Collection<? extends String>) f.get(packet));
- list.add(p.getName());
- setField(packet, "c", list);
- teams.put(HashMapName, packet);
- for (Entry e : teams.entrySet()) {
- Constructor<?> scoreboardTeamConstructor = getNMSClass("PacketPlayOutScoreboardTeam")
- .getConstructor(getNMSClass("ScoreboardTeam"), int.class);
- Object teampacket = scoreboardTeamConstructor.newInstance(e.getValue(), 0);
- sendPacket(p, teampacket);
- }
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- private static void setField(Object object, String fieldname, Object value) {
- try {
- Field field = object.getClass().getDeclaredField(fieldname);
- field.setAccessible(true);
- field.set(object, value);
- field.setAccessible(false);
- } catch (Exception ex) {
- ex.printStackTrace();
- }
- }
- private static void sendPacket(Player player, Object packet) {
- try {
- Object handle = player.getClass().getMethod("getHandle").invoke(player);
- Object playerConnection = handle.getClass().getField("playerConnection").get(handle);
- playerConnection.getClass().getMethod("sendPacket", getNMSClass("Packet")).invoke(playerConnection, packet);
- }
- catch (Exception e) {
- e.printStackTrace();
- }
- }
- private static Class<?> getNMSClass(String name) {
- String version = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
- try {
- return Class.forName("net.minecraft.server." + version + "." + name);
- }
- catch (ClassNotFoundException e) {
- e.printStackTrace();
- return null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement