diff --git a/.gitignore b/.gitignore index 17d0f8a..a573eb1 100644 --- a/.gitignore +++ b/.gitignore @@ -49,4 +49,6 @@ target dependency-reduced-pom.xml # Kept for convenience -v1_19_R3 \ No newline at end of file +v1_19_R3 +# MockBukkit logs +logs \ No newline at end of file diff --git a/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java b/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java index c8f3ec2..22ea766 100644 --- a/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java +++ b/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java @@ -149,8 +149,8 @@ public class AppearanceManager { respawn.setDifficulty(world.getDifficulty()); respawn.setCopyMetadata(false); respawn.getHandle().getBooleans().write(0, false); // is debug - respawn.getHandle().getBooleans().write(1, false); // is flat - respawn.broadcastPacket(); + respawn.getHandle().getBooleans().write(1, true); // is flat + respawn.sendPacket(player); /*final EntityPlayer cp = ((CraftPlayer) player).getHandle(); final PacketPlayOutRespawn respawn = new PacketPlayOutRespawn(cp.cG().Z(), cp.P(), player.getWorld().getSeed(), EnumGamemode.a, EnumGamemode.a, true, true, (byte) 0x00, Optional.empty()); cp.b.a(respawn);*/ diff --git a/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java b/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java index e43c6cb..d7ac3e9 100644 --- a/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java +++ b/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java @@ -2,9 +2,12 @@ package net.artelnatif.nicko.wrapper; 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 com.google.common.hash.Hashing; import org.bukkit.Difficulty; import org.bukkit.GameMode; import org.bukkit.Location; @@ -27,12 +30,11 @@ public class WrapperPlayServerRespawn extends AbstractPacket { } //............. - // Dimension Field (1.8 - Present) + // Dimension/World Field // The dimension field has changed numerous times: - // - Version 1.8 through 1.15 need an integer, - // - 1.15 through 1.18 need a (NBT Tag) Identifier and - // - 1.19.2 and beyond require a Holder of a DimensionManager Identifier (???). - // (Wiki.vg still refers to this as an "Identifier") + // - 1.8 through 1.17 (?) need an integer, + // - 1.18 need a Holder of a World ResourceKey, + // - 1.19.2 reverted 1.18 and simply need a World ResourceKey. // // n.b.: this field is a nightmare please mojang stop refactoring // your code to change things that were working perfectly fine before @@ -50,10 +52,16 @@ public class WrapperPlayServerRespawn extends AbstractPacket { if (MinecraftVersion.WILD_UPDATE.atOrAbove()) { // 1.19 and above handle.getWorldKeys().write(0, value); - return; + } else if (MinecraftVersion.CAVES_CLIFFS_2.atOrAbove()) { + // 1.18 + handle.getHolders( + MinecraftReflection.getDimensionManager(), + BukkitConverters.getDimensionConverter() + ).write(0, value); + } else { + // 1.17 and below (untested) + handle.getDimensions().write(0, value.getEnvironment().ordinal()); } - - handle.getDimensionTypes().write(0, value); } //............. @@ -89,13 +97,12 @@ public class WrapperPlayServerRespawn extends AbstractPacket { } public void setCopyMetadata(boolean value) { - handle.getBytes().write(0, ((byte) (value ? 1 : 0))); + handle.getBytes().write(0, ((byte) (value ? 0x01 : 0x00))); } //............. // Last death location Field // Added in 1.19. - // (useless?) //............. public Optional getLastDeathLocation() { @@ -127,7 +134,7 @@ public class WrapperPlayServerRespawn extends AbstractPacket { public void setSeed(long value) { if (MinecraftVersion.BEE_UPDATE.atOrAbove()) { - handle.getLongs().write(0, value); + handle.getLongs().write(0, Hashing.sha256().hashLong(value).asLong()); } }