Advertisement
The_red_Freak

Nick.java

Feb 8th, 2017
314
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 7.57 KB | None | 0 0
  1. package me.the_red_freak.setskin.util;
  2.  
  3. import java.lang.reflect.Field;
  4. import java.lang.reflect.Modifier;
  5. import java.util.ArrayList;
  6. import java.util.Arrays;
  7. import java.util.List;
  8. import java.util.Set;
  9. import java.util.concurrent.ExecutorService;
  10. import java.util.concurrent.Executors;
  11. import java.util.function.Predicate;
  12. import java.util.stream.Collectors;
  13.  
  14. import org.bukkit.Bukkit;
  15. import org.bukkit.ChatColor;
  16. import org.bukkit.craftbukkit.v1_11_R1.CraftServer;
  17. import org.bukkit.craftbukkit.v1_11_R1.entity.CraftPlayer;
  18. import org.bukkit.craftbukkit.v1_11_R1.inventory.CraftItemStack;
  19. import org.bukkit.craftbukkit.v1_11_R1.util.CraftChatMessage;
  20. import org.bukkit.entity.Player;
  21. import org.bukkit.event.Listener;
  22.  
  23. import com.mojang.authlib.GameProfile;
  24.  
  25. import me.the_red_freak.setskin.main.Main;
  26. import net.minecraft.server.v1_11_R1.EntityPlayer;
  27. import net.minecraft.server.v1_11_R1.EnumGamemode;
  28. import net.minecraft.server.v1_11_R1.EnumItemSlot;
  29. import net.minecraft.server.v1_11_R1.PacketPlayOutEntityDestroy;
  30. import net.minecraft.server.v1_11_R1.PacketPlayOutEntityEquipment;
  31. import net.minecraft.server.v1_11_R1.PacketPlayOutHeldItemSlot;
  32. import net.minecraft.server.v1_11_R1.PacketPlayOutNamedEntitySpawn;
  33. import net.minecraft.server.v1_11_R1.PacketPlayOutPlayerInfo;
  34. import net.minecraft.server.v1_11_R1.PacketPlayOutPlayerInfo.EnumPlayerInfoAction;
  35. import net.minecraft.server.v1_11_R1.PacketPlayOutPlayerInfo.PlayerInfoData;
  36. import net.minecraft.server.v1_11_R1.PacketPlayOutRespawn;
  37. import net.minecraft.server.v1_11_R1.PlayerConnection;
  38.  
  39. public class Nick implements Listener {
  40.     private static ExecutorService pool = Executors.newCachedThreadPool();
  41.     private static Field modifiers = getField(Field.class, "modifiers");
  42.     private static Field actionField = getField(PacketPlayOutPlayerInfo.class, "a");
  43.     private static Field dataField = getField(PacketPlayOutPlayerInfo.class, "b");
  44.     private static Field nameField = getField(GameProfile.class, "name");
  45.     private static Field uuidField = getField(GameProfile.class, "id");
  46.  
  47.     public static void nick(final Player player, final String name) {
  48.         pool.execute(new Runnable() {
  49.             @Override
  50.             public void run() {
  51.                 try {
  52.                     GameProfile prof =
  53.  
  54.                             GameProfileBuilder.fetch(UUIDFetcher.getUUID(ChatColor.stripColor(name)));
  55.  
  56.                     EntityPlayer entity = ((CraftPlayer) player).getHandle();
  57.  
  58.                     nameField.set(prof, name);
  59.                     uuidField.set(prof, player.getUniqueId());
  60.  
  61.                     PacketPlayOutEntityDestroy despawn = new PacketPlayOutEntityDestroy(entity.getId());
  62.                     PacketPlayOutPlayerInfo removeProfile = new PacketPlayOutPlayerInfo();
  63.  
  64.                     setInfo(removeProfile, EnumPlayerInfoAction.REMOVE_PLAYER,
  65.                             removeProfile.new PlayerInfoData(prof, -1, null, null));
  66.  
  67.                     PacketPlayOutPlayerInfo info = new PacketPlayOutPlayerInfo();
  68.  
  69.                     setInfo(info, EnumPlayerInfoAction.ADD_PLAYER, info.new PlayerInfoData(prof, entity.ping,
  70.                             entity.playerInteractManager.getGameMode(), CraftChatMessage.fromString(name)[0]));
  71.  
  72.                     PacketPlayOutNamedEntitySpawn spawn = new PacketPlayOutNamedEntitySpawn(entity);
  73.  
  74.                     Set<PlayerConnection> players = Bukkit.getOnlinePlayers().stream()
  75.  
  76.                             .filter(Predicate.isEqual(player).negate()).map(CraftPlayer.class::cast)
  77.                             .map(CraftPlayer::getHandle).map(p -> p.playerConnection).collect(Collectors.toSet());
  78.  
  79.                     players.forEach(c -> c.sendPacket(despawn));
  80.                     players.forEach(c -> c.sendPacket(removeProfile));
  81.  
  82.                     synchronized (this) {
  83.                         wait(125L);
  84.                     }
  85.  
  86.                     players.forEach(c -> c.sendPacket(info));
  87.  
  88.                     players.forEach(c -> c.sendPacket(spawn));
  89.  
  90.                     List<Player> l = new ArrayList<Player>();
  91.                     for (Player p : Bukkit.getOnlinePlayers()) {
  92.                         l.add(p);
  93.                     }
  94.  
  95.                 } catch (Exception e) {
  96.                     e.printStackTrace();
  97.                 }
  98.             }
  99.         });
  100.     }
  101.  
  102.     @SuppressWarnings("deprecation")
  103.     public static void updateSkin(Player p) {
  104.         try {
  105.             if (!p.isOnline())
  106.                 return;
  107.  
  108.             CraftPlayer cp = (CraftPlayer) p;
  109.             EntityPlayer ep = cp.getHandle();
  110.             int entId = ep.getId();
  111.  
  112.             PacketPlayOutPlayerInfo removeInfo = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.REMOVE_PLAYER, ep);
  113.  
  114.             PacketPlayOutEntityDestroy removeEntity = new PacketPlayOutEntityDestroy(entId);
  115.  
  116.             PacketPlayOutNamedEntitySpawn addNamed = new PacketPlayOutNamedEntitySpawn(ep);
  117.  
  118.             PacketPlayOutPlayerInfo addInfo = new PacketPlayOutPlayerInfo(EnumPlayerInfoAction.ADD_PLAYER, ep);
  119.  
  120.             PacketPlayOutRespawn respawn = new PacketPlayOutRespawn(
  121.                     ep.getWorld().worldProvider.getDimensionManager().getDimensionID(), ep.getWorld().getDifficulty(),
  122.                     ep.getWorld().worldData.getType(), EnumGamemode.getById(p.getGameMode().getValue()));
  123.  
  124.             PacketPlayOutEntityEquipment itemmainhand = new PacketPlayOutEntityEquipment(entId, EnumItemSlot.MAINHAND,
  125.                     CraftItemStack.asNMSCopy(p.getInventory().getItemInMainHand()));
  126.             PacketPlayOutEntityEquipment itemoffhand = new PacketPlayOutEntityEquipment(entId, EnumItemSlot.OFFHAND,
  127.                     CraftItemStack.asNMSCopy(p.getInventory().getItemInOffHand()));
  128.  
  129.             PacketPlayOutEntityEquipment helmet = new PacketPlayOutEntityEquipment(entId, EnumItemSlot.HEAD,
  130.                     CraftItemStack.asNMSCopy(p.getInventory().getHelmet()));
  131.  
  132.             PacketPlayOutEntityEquipment chestplate = new PacketPlayOutEntityEquipment(entId, EnumItemSlot.CHEST,
  133.                     CraftItemStack.asNMSCopy(p.getInventory().getChestplate()));
  134.  
  135.             PacketPlayOutEntityEquipment leggings = new PacketPlayOutEntityEquipment(entId, EnumItemSlot.LEGS,
  136.                     CraftItemStack.asNMSCopy(p.getInventory().getLeggings()));
  137.  
  138.             PacketPlayOutEntityEquipment boots = new PacketPlayOutEntityEquipment(entId, EnumItemSlot.FEET,
  139.                     CraftItemStack.asNMSCopy(p.getInventory().getBoots()));
  140.  
  141.             PacketPlayOutHeldItemSlot slot = new PacketPlayOutHeldItemSlot(p.getInventory().getHeldItemSlot());
  142.  
  143.             for (Player pOnline : ((CraftServer) Bukkit.getServer()).getOnlinePlayers()) {
  144.                 final CraftPlayer craftOnline = (CraftPlayer) pOnline;
  145.                 PlayerConnection con = craftOnline.getHandle().playerConnection;
  146.                 if (pOnline.getName().equals(p.getName())) {
  147.                     con.sendPacket(removeInfo);
  148.                     con.sendPacket(addInfo);
  149.                     con.sendPacket(respawn);
  150.                     con.sendPacket(slot);
  151.                     craftOnline.updateScaledHealth();
  152.                     craftOnline.getHandle().triggerHealthUpdate();
  153.                     craftOnline.updateInventory();
  154.                     Bukkit.getScheduler().runTask(Main.getPlugin(Main.class), new Runnable() {
  155.  
  156.                         @Override
  157.                         public void run() {
  158.                             craftOnline.getHandle().updateAbilities();
  159.                         }
  160.  
  161.                     });
  162.                     continue;
  163.                 }
  164.                 if (pOnline.canSee(p)) {
  165.                     con.sendPacket(removeEntity);
  166.                     con.sendPacket(removeInfo);
  167.                     con.sendPacket(addInfo);
  168.                     con.sendPacket(addNamed);
  169.                     con.sendPacket(itemmainhand);
  170.                     con.sendPacket(itemoffhand);
  171.                     con.sendPacket(helmet);
  172.                     con.sendPacket(chestplate);
  173.                     con.sendPacket(leggings);
  174.                     con.sendPacket(boots);
  175.                 }
  176.             }
  177.         } catch (Exception e) {
  178.         }
  179.  
  180.     }
  181.  
  182.     private static PacketPlayOutPlayerInfo setInfo(PacketPlayOutPlayerInfo packet, EnumPlayerInfoAction action,
  183.             PlayerInfoData... data) {
  184.         try {
  185.             actionField.set(packet, action);
  186.             dataField.set(packet, Arrays.asList(data));
  187.         } catch (Exception e) {
  188.             e.printStackTrace();
  189.         }
  190.         return packet;
  191.     }
  192.  
  193.     private static Field getField(Class<?> clazz, String name) {
  194.         try {
  195.             Field field = clazz.getDeclaredField(name);
  196.             field.setAccessible(true);
  197.             if (Modifier.isFinal(field.getModifiers())) {
  198.                 modifiers.set(field, field.getModifiers() & ~Modifier.FINAL);
  199.             }
  200.             return field;
  201.         } catch (Exception e) {
  202.             e.printStackTrace();
  203.         }
  204.         return null;
  205.     }
  206.  
  207. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement