/
ProfileEditor.java
80 lines (66 loc) · 2.8 KB
/
ProfileEditor.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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.HashSet;
import java.util.Map;
import java.util.UUID;
public abstract class ProfileEditor {
public final static Map<UUID, PlayerProfile> fakeProfiles = new HashMap<>();
public final static HashSet<UUID> mirrorUUIDs = new HashSet<>();
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);
}
}
}
}