package net.aufdemrand.denizen.nms.abstracts; import net.aufdemrand.denizen.nms.NMSHandler; import net.aufdemrand.denizen.nms.util.PlayerProfile; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.EventHandler; import org.bukkit.event.Listener; import org.bukkit.event.player.PlayerQuitEvent; import java.util.HashMap; import java.util.Map; import java.util.UUID; public abstract class ProfileEditor { protected static final Map<UUID, PlayerProfile> fakeProfiles = new HashMap<UUID, PlayerProfile>(); public ProfileEditor() { Bukkit.getServer().getPluginManager().registerEvents(new PlayerProfileEditorListener(), NMSHandler.getJavaPlugin()); } public void setPlayerName(Player player, String name) { PlayerProfile profile = getFakeProfile(player); profile.setName(name); updatePlayer(player, false); } public String getPlayerName(Player player) { return getFakeProfile(player).getName(); } public void setPlayerSkin(Player player, String name) { PlayerProfile profile = getFakeProfile(player); PlayerProfile skinProfile = NMSHandler.getInstance().fillPlayerProfile(new PlayerProfile(name, null)); profile.setTexture(skinProfile.getTexture()); profile.setTextureSignature(skinProfile.getTextureSignature()); updatePlayer(player, true); } public void setPlayerSkinBlob(Player player, String blob) { PlayerProfile profile = getFakeProfile(player); String[] split = blob.split(";"); profile.setTexture(split[0]); profile.setTextureSignature(split.length > 0 ? split[1] : null); updatePlayer(player, true); } public String getPlayerSkinBlob(Player player) { PlayerProfile prof = getFakeProfile(player); return prof.getTexture() + ";" + prof.getTextureSignature(); } protected abstract void updatePlayer(Player player, boolean isSkinChanging); private PlayerProfile getFakeProfile(Player player) { UUID uuid = player.getUniqueId(); if (fakeProfiles.containsKey(uuid)) { return fakeProfiles.get(uuid); } else { PlayerProfile fakeProfile = NMSHandler.getInstance().getPlayerProfile(player); fakeProfiles.put(uuid, fakeProfile); return fakeProfile; } } private static class PlayerProfileEditorListener implements Listener { @EventHandler public void onPlayerQuit(PlayerQuitEvent event) { UUID uuid = event.getPlayer().getUniqueId(); if (fakeProfiles.containsKey(uuid)) { fakeProfiles.remove(uuid); } } } }