From 584b34fd51138fb90f47ea82187df2a4c2733cf3 Mon Sep 17 00:00:00 2001 From: ineanto Date: Mon, 29 May 2023 14:01:30 +0200 Subject: [PATCH] feat(wrapper): handle previous versions --- .../nicko/disguise/AppearanceManager.java | 44 ++++++++++--------- .../wrapper/WrapperPlayServerRespawn.java | 6 ++- .../WrapperPlayerServerPlayerInfo.java | 9 +++- 3 files changed, 35 insertions(+), 24 deletions(-) diff --git a/src/main/java/xyz/atnrch/nicko/disguise/AppearanceManager.java b/src/main/java/xyz/atnrch/nicko/disguise/AppearanceManager.java index 7bdd742..cc6f507 100644 --- a/src/main/java/xyz/atnrch/nicko/disguise/AppearanceManager.java +++ b/src/main/java/xyz/atnrch/nicko/disguise/AppearanceManager.java @@ -150,24 +150,32 @@ public class AppearanceManager { respawn.setGameMode(player.getGameMode()); respawn.setPreviousGameMode(player.getGameMode()); respawn.setDifficulty(world.getDifficulty()); - respawn.setCopyMetadata(false); - respawn.getHandle().getBooleans().write(0, false); // is debug - respawn.getHandle().getBooleans().write(0, false); // is flat + respawn.setCopyMetadata(true); respawn.sendPacket(player); } private void updateTabList(WrappedGameProfile gameProfile, String displayName) { - final WrapperPlayerServerPlayerInfoRemove remove = new WrapperPlayerServerPlayerInfoRemove(); - final WrapperPlayerServerPlayerInfo update = new WrapperPlayerServerPlayerInfo(); - final EnumSet actions = EnumSet.of( - EnumWrappers.PlayerInfoAction.REMOVE_PLAYER, // Necessary for 1.19.2 and below - EnumWrappers.PlayerInfoAction.ADD_PLAYER, - EnumWrappers.PlayerInfoAction.INITIALIZE_CHAT, - EnumWrappers.PlayerInfoAction.UPDATE_LISTED, - EnumWrappers.PlayerInfoAction.UPDATE_DISPLAY_NAME, - EnumWrappers.PlayerInfoAction.UPDATE_GAME_MODE, - EnumWrappers.PlayerInfoAction.UPDATE_LATENCY); - update.setData(ImmutableList.of(new PlayerInfoData( + final WrapperPlayerServerPlayerInfo add = new WrapperPlayerServerPlayerInfo(); + if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { + final WrapperPlayerServerPlayerInfoRemove remove = new WrapperPlayerServerPlayerInfoRemove(); + final EnumSet actions = EnumSet.of( + EnumWrappers.PlayerInfoAction.ADD_PLAYER, + EnumWrappers.PlayerInfoAction.INITIALIZE_CHAT, + EnumWrappers.PlayerInfoAction.UPDATE_LISTED, + EnumWrappers.PlayerInfoAction.UPDATE_DISPLAY_NAME, + EnumWrappers.PlayerInfoAction.UPDATE_GAME_MODE, + EnumWrappers.PlayerInfoAction.UPDATE_LATENCY); + remove.setUUIDs(ImmutableList.of(player.getUniqueId())); + remove.sendPacket(player); + add.setActions(actions); + } else { + final WrapperPlayerServerPlayerInfo remove = new WrapperPlayerServerPlayerInfo(); + remove.setActions(EnumSet.of(EnumWrappers.PlayerInfoAction.REMOVE_PLAYER)); + add.setActions(EnumSet.of(EnumWrappers.PlayerInfoAction.ADD_PLAYER)); + remove.sendPacket(player); + } + + add.setData(ImmutableList.of(new PlayerInfoData( player.getUniqueId(), player.getPing(), true, @@ -180,12 +188,6 @@ public class AppearanceManager { // No, I'll not waste another day fixing their mess. Go cry about it to Mojang. // (Long live NoEncryption!) ))); - if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { - actions.remove(EnumWrappers.PlayerInfoAction.REMOVE_PLAYER); - remove.setUUIDs(ImmutableList.of(player.getUniqueId())); - remove.sendPacket(player); - } - update.setActions(actions); - update.sendPacket(player); + add.sendPacket(player); } } \ No newline at end of file diff --git a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java index 817f8c1..9908724 100644 --- a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java +++ b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java @@ -100,7 +100,11 @@ public class WrapperPlayServerRespawn extends AbstractPacket { } public void setCopyMetadata(boolean value) { - handle.getBytes().write(0, ((byte) (value ? 0x01 : 0x00))); + if(MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { + handle.getBytes().write(0, ((byte) (value ? 0x01 : 0x00))); + } else { + handle.getBooleans().write(0, value); + } } //............. diff --git a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfo.java b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfo.java index 3befbe2..df989b4 100644 --- a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfo.java +++ b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfo.java @@ -2,6 +2,7 @@ package xyz.atnrch.nicko.wrapper; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.utility.MinecraftVersion; import com.comphenix.protocol.wrappers.EnumWrappers; import com.comphenix.protocol.wrappers.PlayerInfoData; @@ -32,7 +33,11 @@ public class WrapperPlayerServerPlayerInfo extends AbstractPacket { } public void setActions(Set value) { - handle.getPlayerInfoActions().write(0, value); + if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { + handle.getPlayerInfoActions().write(0, value); + } else { + handle.getPlayerInfoAction().write(0, value.stream().iterator().next()); // Get the first Value. + } } public List getData() { @@ -40,6 +45,6 @@ public class WrapperPlayerServerPlayerInfo extends AbstractPacket { } public void setData(List value) { - handle.getPlayerInfoDataLists().write(1, value); + handle.getPlayerInfoDataLists().write(0, value); } }