Hallo,
ich möchte einen NickSystem schreiben, wo ich den Namen, Skin und die UUID des Spielers ändern kann. Ich habe es bereits geschafft den Namen und den Skin des Spielers zu ändern. Doch die UUID ändert sich nicht. Den Namen habe ich geändert, indem ich im GameProfile des Spielers den Field "name" auf die gewünschte Name geändert habe. Genauso habe ich es auch mit der UUID versucht. Ich habe im GameProfile des Spielers deb Field "id" auf die gewünschte UUID geändert ( UUID.randomUUID(); ). Das ganze klappt auch, wenn ich das ganze im PlayerLoginEvent mache. Deshalb denke ich das der Fehler beim neu laden des Spielers ist. Ich hoffe ihr könnt mir dabei behilflich sein. Der Plugin ist übrigens auf der 1.16.4.
ich möchte einen NickSystem schreiben, wo ich den Namen, Skin und die UUID des Spielers ändern kann. Ich habe es bereits geschafft den Namen und den Skin des Spielers zu ändern. Doch die UUID ändert sich nicht. Den Namen habe ich geändert, indem ich im GameProfile des Spielers den Field "name" auf die gewünschte Name geändert habe. Genauso habe ich es auch mit der UUID versucht. Ich habe im GameProfile des Spielers deb Field "id" auf die gewünschte UUID geändert ( UUID.randomUUID(); ). Das ganze klappt auch, wenn ich das ganze im PlayerLoginEvent mache. Deshalb denke ich das der Fehler beim neu laden des Spielers ist. Ich hoffe ihr könnt mir dabei behilflich sein. Der Plugin ist übrigens auf der 1.16.4.
nick Methode:
public static void nickPlayer(Player player, String name) {
GameProfile gameProfile = ((CraftPlayer) player).getHandle().getProfile();
UUID uuid = UUID.randomUUID();
try {
Field field1 = gameProfile.getClass().getDeclaredField("id");
Field field2 = gameProfile.getClass().getDeclaredField("name");
field1.setAccessible(true);
field2.setAccessible(true);
field1.set(gameProfile, uuid);
field2.set(gameProfile, name);
field1.setAccessible(false);
field2.setAccessible(false);
player.setDisplayName(name);
} catch(NoSuchFieldException | IllegalAcces***ception e) {
e.printStackTrace();
}
gameProfile.getProperties().clear();
Skin skin = new Skin(Bukkit.getOfflinePlayer(name).getUniqueId().toString().replace("-", ""));
gameProfile.getProperties().put("textures", new Property("textures", skin.getSkinValue(), skin.getSkinSignatur()));
if(skin.getSkinName() != null) {
gameProfile.getProperties().put(skin.getSkinName(), new Property(skin.getSkinName(), skin.getSkinValue(), skin.getSkinSignatur()));
}
}
public static void reloadPlayer(Player player) {
CraftPlayer craftPlayer = ((CraftPlayer) player);
EntityPlayer entityPlayer = craftPlayer.getHandle();
PacketPlayOutEntityDestroy packetPlayOutEntityDestroy = new PacketPlayOutEntityDestroy(craftPlayer.getEntityId());
PacketPlayOutPlayerInfo packetPlayOutPlayerInfoRemove = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.REMOVE_PLAYER, entityPlayer);
PacketPlayOutPlayerInfo packetPlayOutPlayerInfoAdd = new PacketPlayOutPlayerInfo(PacketPlayOutPlayerInfo.EnumPlayerInfoAction.ADD_PLAYER, entityPlayer);
PacketPlayOutNamedEntitySpawn packetPlayOutNamedEntitySpawn = new PacketPlayOutNamedEntitySpawn(entityPlayer);
Bukkit.getScheduler().scheduleSyncDelayedTask(NickAPI.getInstance(), new Runnable() {
@Override
public void run() {
for(Player on : Bukkit.getOnlinePlayers()) {
on.hidePlayer(NickAPI.getInstance(), player);
}
Bukkit.getScheduler().scheduleSyncDelayedTask(NickAPI.getInstance(), new Runnable() {
@Override
public void run() {
for(Player on : Bukkit.getOnlinePlayers()) {
on.showPlayer(NickAPI.getInstance(), player);
}
sendNickPacket(packetPlayOutEntityDestroy);
sendNickPacket(packetPlayOutPlayerInfoRemove);
for(Player on : Bukkit.getOnlinePlayers()) {
if(on != player) {
sendPacket(packetPlayOutPlayerInfoAdd, on);
sendPacket(packetPlayOutNamedEntitySpawn, on);
}
}
player.updateInventory();
}
}, 15);
}
}, 1);
}
Zuletzt bearbeitet: