Advertisement
Guest User

Untitled

a guest
Oct 31st, 2014
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.31 KB | None | 0 0
  1. package me.belka;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Map.Entry;
  6. import java.util.UUID;
  7.  
  8. import org.bukkit.Bukkit;
  9. import org.bukkit.entity.Player;
  10. import org.bukkit.event.EventHandler;
  11. import org.bukkit.event.player.PlayerJoinEvent;
  12. import org.bukkit.event.player.PlayerQuitEvent;
  13. import org.bukkit.event.player.PlayerRespawnEvent;
  14.  
  15. public class SkinChanger {
  16.  
  17. private static Map<String, String> changedSkins = new HashMap<>();
  18.  
  19. public static void changeSkin(Player p, String name) {
  20. RefClass classCraftPlayer = ReflectionUtil.getRefClass("{cb}.entity.CraftPlayer");
  21. RefMethod methodGetHandle = classCraftPlayer.getMethod("getHandle");
  22. RefClass classEntityPlayer = ReflectionUtil.getRefClass("{nms}.EntityPlayer");
  23. RefField fieldPlayerConnection = classEntityPlayer.getField("playerConnection");
  24. RefClass classPlayerConnection = ReflectionUtil.getRefClass("{nms}.PlayerConnection");
  25. RefMethod methodSendPacket = classPlayerConnection.findMethodByName("sendPacket");
  26.  
  27. RefClass p29 = ReflectionUtil.getRefClass("{nms}.PacketPlayOutEntityDestroy");
  28.  
  29. RefClass p20 = ReflectionUtil.getRefClass("{nms}.PacketPlayOutNamedEntitySpawn");
  30.  
  31. RefConstructor pp20 = p20.getConstructor(ReflectionUtil.getRefClass("{nms}.EntityHuman"));
  32.  
  33. RefConstructor pp29 = p29.getConstructor(int[].class);
  34.  
  35. int[] entityId;
  36.  
  37. entityId = new int[1];
  38.  
  39. entityId[0] = p.getEntityId();
  40.  
  41. Object packetEntityDestroy = pp29.create(entityId);
  42.  
  43. Object packetNamedEntitySpawn = pp20.create((ReflectionUtil.getRefClass("{cb}.entity.CraftPlayer")).getMethod("getHandle").of(p).call());
  44.  
  45. RefField f = p20.getField("b");
  46.  
  47. RefClass gp = ReflectionUtil.getRefClass("{nm}.util.com.mojang.authlib.GameProfile");
  48.  
  49. RefConstructor rc = gp.getConstructor(UUID.class, String.class);
  50.  
  51. Object gameProfile = rc.create(p.getUniqueId(), name);
  52.  
  53. f.of(packetNamedEntitySpawn).set(gameProfile);
  54.  
  55. changedSkins.put(p.getName(), name);
  56.  
  57. p.setDisplayName(name);
  58. p.setPlayerListName(name);
  59.  
  60. for (Player player : Bukkit.getOnlinePlayers()) {
  61.  
  62. if(player != p) {
  63. Object handle = methodGetHandle.of(player).call();
  64. Object connection = fieldPlayerConnection.of(handle).get();
  65.  
  66. methodSendPacket.of(connection).call(packetEntityDestroy);
  67. methodSendPacket.of(connection).call(packetNamedEntitySpawn);
  68. }
  69. }
  70. }
  71.  
  72. public static void removeSkin(Player p) {
  73. RefClass classCraftPlayer = ReflectionUtil.getRefClass("{cb}.entity.CraftPlayer");
  74. RefMethod methodGetHandle = classCraftPlayer.getMethod("getHandle");
  75. RefClass classEntityPlayer = ReflectionUtil.getRefClass("{nms}.EntityPlayer");
  76. RefField fieldPlayerConnection = classEntityPlayer.getField("playerConnection");
  77. RefClass classPlayerConnection = ReflectionUtil.getRefClass("{nms}.PlayerConnection");
  78. RefMethod methodSendPacket = classPlayerConnection.findMethodByName("sendPacket");
  79.  
  80. RefClass p29 = ReflectionUtil.getRefClass("{nms}.PacketPlayOutEntityDestroy");
  81.  
  82. RefClass p20 = ReflectionUtil.getRefClass("{nms}.PacketPlayOutNamedEntitySpawn");
  83.  
  84. RefConstructor pp20 = p20.getConstructor(ReflectionUtil.getRefClass("{nms}.EntityHuman"));
  85.  
  86. RefConstructor pp29 = p29.getConstructor(int[].class);
  87.  
  88. int[] entityId;
  89.  
  90. entityId = new int[1];
  91.  
  92. entityId[0] = p.getEntityId();
  93.  
  94. Object packetEntityDestroy = pp29.create(entityId);
  95.  
  96. Object packetNamedEntitySpawn = pp20.create((ReflectionUtil.getRefClass("{cb}.entity.CraftPlayer")).getMethod("getHandle").of(p).call());
  97.  
  98. RefField f = p20.getField("b");
  99.  
  100. RefClass gp = ReflectionUtil.getRefClass("{nm}.util.com.mojang.authlib.GameProfile");
  101.  
  102. RefConstructor rc = gp.getConstructor(UUID.class, String.class);
  103.  
  104. Object gameProfile = rc.create(p.getUniqueId(), p.getName());
  105.  
  106. f.of(packetNamedEntitySpawn).set(gameProfile);
  107.  
  108. changedSkins.remove(p.getName());
  109.  
  110. p.setDisplayName(p.getName());
  111. p.setPlayerListName(p.getName());
  112.  
  113. for (Player player : Bukkit.getOnlinePlayers()) {
  114.  
  115. if(player != p) {
  116. Object handle = methodGetHandle.of(player).call();
  117. Object connection = fieldPlayerConnection.of(handle).get();
  118.  
  119. methodSendPacket.of(connection).call(packetEntityDestroy);
  120. methodSendPacket.of(connection).call(packetNamedEntitySpawn);
  121. }
  122. }
  123. }
  124.  
  125. @SuppressWarnings("deprecation")
  126. public static Player[] getPlayersChangedSkins() {
  127. for(int i = 0; i < changedSkins.size(); i++) {
  128. Player[] changed = new Player[changedSkins.size()];
  129.  
  130. for(Entry<String, String> entry : changedSkins.entrySet()) {
  131. changed[i] = Bukkit.getPlayer(entry.getKey());
  132. return changed;
  133. }
  134. }
  135. return null;
  136. }
  137.  
  138. public static String getNewPlayerName(Player p) {
  139. if(changedSkins.containsKey(p.getName())) {
  140. return changedSkins.get(p.getName());
  141. }
  142. return null;
  143. }
  144.  
  145. public static String getOldPlayerName(String name) {
  146. for(Entry<String, String> entry : changedSkins.entrySet()) {
  147. if(entry.getValue().equals(name)) {
  148. return entry.getKey();
  149. }
  150. }
  151. return null;
  152. }
  153.  
  154. @EventHandler
  155. public void onRespawn(final PlayerRespawnEvent e) {
  156. changeSkin(e.getPlayer(), getNewPlayerName(e.getPlayer()));
  157. }
  158.  
  159. @EventHandler
  160. public void onLeave(PlayerQuitEvent e) {
  161. Player p = e.getPlayer();
  162. if (isDisguised(p)) {
  163. removeSkin(p);
  164. }
  165. }
  166.  
  167. @EventHandler
  168. public void onJoin(PlayerJoinEvent e) {
  169. changeSkin(e.getPlayer(), getNewPlayerName(e.getPlayer()));
  170. }
  171.  
  172. public static boolean isDisguised(Player p) {
  173. return changedSkins.containsKey(p.getName());
  174. }
  175.  
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement