Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package me.belka;
- import java.util.HashMap;
- import java.util.Map;
- import java.util.Map.Entry;
- import java.util.UUID;
- import org.bukkit.Bukkit;
- import org.bukkit.entity.Player;
- import org.bukkit.event.EventHandler;
- import org.bukkit.event.player.PlayerJoinEvent;
- import org.bukkit.event.player.PlayerQuitEvent;
- import org.bukkit.event.player.PlayerRespawnEvent;
- public class SkinChanger {
- private static Map<String, String> changedSkins = new HashMap<>();
- public static void changeSkin(Player p, String name) {
- RefClass classCraftPlayer = ReflectionUtil.getRefClass("{cb}.entity.CraftPlayer");
- RefMethod methodGetHandle = classCraftPlayer.getMethod("getHandle");
- RefClass classEntityPlayer = ReflectionUtil.getRefClass("{nms}.EntityPlayer");
- RefField fieldPlayerConnection = classEntityPlayer.getField("playerConnection");
- RefClass classPlayerConnection = ReflectionUtil.getRefClass("{nms}.PlayerConnection");
- RefMethod methodSendPacket = classPlayerConnection.findMethodByName("sendPacket");
- RefClass p29 = ReflectionUtil.getRefClass("{nms}.PacketPlayOutEntityDestroy");
- RefClass p20 = ReflectionUtil.getRefClass("{nms}.PacketPlayOutNamedEntitySpawn");
- RefConstructor pp20 = p20.getConstructor(ReflectionUtil.getRefClass("{nms}.EntityHuman"));
- RefConstructor pp29 = p29.getConstructor(int[].class);
- int[] entityId;
- entityId = new int[1];
- entityId[0] = p.getEntityId();
- Object packetEntityDestroy = pp29.create(entityId);
- Object packetNamedEntitySpawn = pp20.create((ReflectionUtil.getRefClass("{cb}.entity.CraftPlayer")).getMethod("getHandle").of(p).call());
- RefField f = p20.getField("b");
- RefClass gp = ReflectionUtil.getRefClass("{nm}.util.com.mojang.authlib.GameProfile");
- RefConstructor rc = gp.getConstructor(UUID.class, String.class);
- Object gameProfile = rc.create(p.getUniqueId(), name);
- f.of(packetNamedEntitySpawn).set(gameProfile);
- changedSkins.put(p.getName(), name);
- p.setDisplayName(name);
- p.setPlayerListName(name);
- for (Player player : Bukkit.getOnlinePlayers()) {
- if(player != p) {
- Object handle = methodGetHandle.of(player).call();
- Object connection = fieldPlayerConnection.of(handle).get();
- methodSendPacket.of(connection).call(packetEntityDestroy);
- methodSendPacket.of(connection).call(packetNamedEntitySpawn);
- }
- }
- }
- public static void removeSkin(Player p) {
- RefClass classCraftPlayer = ReflectionUtil.getRefClass("{cb}.entity.CraftPlayer");
- RefMethod methodGetHandle = classCraftPlayer.getMethod("getHandle");
- RefClass classEntityPlayer = ReflectionUtil.getRefClass("{nms}.EntityPlayer");
- RefField fieldPlayerConnection = classEntityPlayer.getField("playerConnection");
- RefClass classPlayerConnection = ReflectionUtil.getRefClass("{nms}.PlayerConnection");
- RefMethod methodSendPacket = classPlayerConnection.findMethodByName("sendPacket");
- RefClass p29 = ReflectionUtil.getRefClass("{nms}.PacketPlayOutEntityDestroy");
- RefClass p20 = ReflectionUtil.getRefClass("{nms}.PacketPlayOutNamedEntitySpawn");
- RefConstructor pp20 = p20.getConstructor(ReflectionUtil.getRefClass("{nms}.EntityHuman"));
- RefConstructor pp29 = p29.getConstructor(int[].class);
- int[] entityId;
- entityId = new int[1];
- entityId[0] = p.getEntityId();
- Object packetEntityDestroy = pp29.create(entityId);
- Object packetNamedEntitySpawn = pp20.create((ReflectionUtil.getRefClass("{cb}.entity.CraftPlayer")).getMethod("getHandle").of(p).call());
- RefField f = p20.getField("b");
- RefClass gp = ReflectionUtil.getRefClass("{nm}.util.com.mojang.authlib.GameProfile");
- RefConstructor rc = gp.getConstructor(UUID.class, String.class);
- Object gameProfile = rc.create(p.getUniqueId(), p.getName());
- f.of(packetNamedEntitySpawn).set(gameProfile);
- changedSkins.remove(p.getName());
- p.setDisplayName(p.getName());
- p.setPlayerListName(p.getName());
- for (Player player : Bukkit.getOnlinePlayers()) {
- if(player != p) {
- Object handle = methodGetHandle.of(player).call();
- Object connection = fieldPlayerConnection.of(handle).get();
- methodSendPacket.of(connection).call(packetEntityDestroy);
- methodSendPacket.of(connection).call(packetNamedEntitySpawn);
- }
- }
- }
- @SuppressWarnings("deprecation")
- public static Player[] getPlayersChangedSkins() {
- for(int i = 0; i < changedSkins.size(); i++) {
- Player[] changed = new Player[changedSkins.size()];
- for(Entry<String, String> entry : changedSkins.entrySet()) {
- changed[i] = Bukkit.getPlayer(entry.getKey());
- return changed;
- }
- }
- return null;
- }
- public static String getNewPlayerName(Player p) {
- if(changedSkins.containsKey(p.getName())) {
- return changedSkins.get(p.getName());
- }
- return null;
- }
- public static String getOldPlayerName(String name) {
- for(Entry<String, String> entry : changedSkins.entrySet()) {
- if(entry.getValue().equals(name)) {
- return entry.getKey();
- }
- }
- return null;
- }
- @EventHandler
- public void onRespawn(final PlayerRespawnEvent e) {
- changeSkin(e.getPlayer(), getNewPlayerName(e.getPlayer()));
- }
- @EventHandler
- public void onLeave(PlayerQuitEvent e) {
- Player p = e.getPlayer();
- if (isDisguised(p)) {
- removeSkin(p);
- }
- }
- @EventHandler
- public void onJoin(PlayerJoinEvent e) {
- changeSkin(e.getPlayer(), getNewPlayerName(e.getPlayer()));
- }
- public static boolean isDisguised(Player p) {
- return changedSkins.containsKey(p.getName());
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement