From a01b564912b455eb7b2f08b5905ac0327102074d Mon Sep 17 00:00:00 2001 From: ineanto Date: Fri, 28 Apr 2023 22:47:57 +0200 Subject: [PATCH] feat: update wrapper --- .../net/artelnatif/nicko/NickoBukkit.java | 2 +- .../nicko/disguise/AppearanceManager.java | 3 ++ .../wrapper/WrapperPlayServerRespawn.java | 31 +++++++++++++++---- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/artelnatif/nicko/NickoBukkit.java b/src/main/java/net/artelnatif/nicko/NickoBukkit.java index bff91c4..061ea72 100644 --- a/src/main/java/net/artelnatif/nicko/NickoBukkit.java +++ b/src/main/java/net/artelnatif/nicko/NickoBukkit.java @@ -111,7 +111,7 @@ public class NickoBukkit extends JavaPlugin { protocolManager.addPacketListener(new PacketAdapter( this, ListenerPriority.NORMAL, - PacketType.Play.Server.PLAYER_INFO) { + PacketType.Play.Server.RESPAWN) { @Override public void onPacketReceiving(PacketEvent event) { } diff --git a/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java b/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java index afaf82e..9c82225 100644 --- a/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java +++ b/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java @@ -145,6 +145,9 @@ public class AppearanceManager { respawn.setDifficulty(world.getDifficulty()); respawn.setDimension(world); respawn.setSeed(world.getSeed()); + respawn.setLastDeathLocation(player.getLocation()); + respawn.getHandle().getBooleans().write(0, false); // is debug + respawn.getHandle().getBooleans().write(1, false); // is flat respawn.sendPacket(player); } diff --git a/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java b/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java index 758fb77..6ac26ee 100644 --- a/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java +++ b/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java @@ -4,12 +4,16 @@ import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; import com.comphenix.protocol.utility.MinecraftReflection; import com.comphenix.protocol.utility.MinecraftVersion; +import com.comphenix.protocol.wrappers.BlockPosition; import com.comphenix.protocol.wrappers.BukkitConverters; import com.comphenix.protocol.wrappers.EnumWrappers; import org.bukkit.Difficulty; import org.bukkit.GameMode; +import org.bukkit.Location; import org.bukkit.World; +import java.util.Optional; + /** * Up-to-date version of the Wrapper class * for the PacketPlayServerRespawn. @@ -51,10 +55,7 @@ public class WrapperPlayServerRespawn extends AbstractPacket { public void setDimension(World value) { if (MinecraftVersion.WILD_UPDATE.atOrAbove()) { // 1.19 and above - handle.getWorldKeys().withParamType( - MinecraftReflection.getResourceKey(), - BukkitConverters.getWorldKeyConverter() - ).write(0, value); + handle.getWorldKeys().write(0, value); return; } // 1.18 and below @@ -66,15 +67,33 @@ public class WrapperPlayServerRespawn extends AbstractPacket { //............. public void getGameMode() { - // Present since 1.8, we're good! handle.getGameModes().read(0); } public void setGameMode(GameMode value) { - // Present since 1.8, we're good! handle.getGameModes().write(0, EnumWrappers.NativeGameMode.fromBukkit(value)); } + //............. + // Last death location Field + // Added in 1.19. + //............. + + public Optional getLastDeathLocation() { + if (MinecraftVersion.WILD_UPDATE.atOrAbove()) { + return handle.getOptionals(BlockPosition.getConverter()).read(0); + } + return Optional.empty(); + } + + public void setLastDeathLocation(Location value) { + if (MinecraftVersion.WILD_UPDATE.atOrAbove()) { + final BlockPosition locationToBlockPosition = BlockPosition.getConverter().getSpecific(value); + final Optional blockPosition = Optional.ofNullable(locationToBlockPosition); + handle.getOptionals(BlockPosition.getConverter()).write(0, blockPosition); + } + } + //............. // Seed Field // Added in 1.15.