diff --git a/logs/2023-04-28-1.log.gz b/logs/2023-04-28-1.log.gz new file mode 100644 index 0000000..20d5077 Binary files /dev/null and b/logs/2023-04-28-1.log.gz differ diff --git a/logs/2023-04-28-2.log.gz b/logs/2023-04-28-2.log.gz new file mode 100644 index 0000000..c9b7d6d Binary files /dev/null and b/logs/2023-04-28-2.log.gz differ diff --git a/logs/2023-04-28-3.log.gz b/logs/2023-04-28-3.log.gz new file mode 100644 index 0000000..20a78dd Binary files /dev/null and b/logs/2023-04-28-3.log.gz differ diff --git a/logs/2023-04-28-4.log.gz b/logs/2023-04-28-4.log.gz new file mode 100644 index 0000000..ffec4b1 Binary files /dev/null and b/logs/2023-04-28-4.log.gz differ diff --git a/logs/2023-04-28-5.log.gz b/logs/2023-04-28-5.log.gz new file mode 100644 index 0000000..454921f Binary files /dev/null and b/logs/2023-04-28-5.log.gz differ diff --git a/logs/2023-04-28-6.log.gz b/logs/2023-04-28-6.log.gz new file mode 100644 index 0000000..c0d0683 Binary files /dev/null and b/logs/2023-04-28-6.log.gz differ diff --git a/logs/2023-04-28-7.log.gz b/logs/2023-04-28-7.log.gz new file mode 100644 index 0000000..d1c0feb Binary files /dev/null and b/logs/2023-04-28-7.log.gz differ diff --git a/logs/2023-04-28-8.log.gz b/logs/2023-04-28-8.log.gz new file mode 100644 index 0000000..ffb6f05 Binary files /dev/null and b/logs/2023-04-28-8.log.gz differ diff --git a/pom.xml b/pom.xml index be4c70f..e88257a 100644 --- a/pom.xml +++ b/pom.xml @@ -55,7 +55,7 @@ org.spigotmc - spigot-api + spigot 1.19.4-R0.1-SNAPSHOT provided diff --git a/src/main/java/net/artelnatif/nicko/NickoBukkit.java b/src/main/java/net/artelnatif/nicko/NickoBukkit.java index 061ea72..641b86b 100644 --- a/src/main/java/net/artelnatif/nicko/NickoBukkit.java +++ b/src/main/java/net/artelnatif/nicko/NickoBukkit.java @@ -3,7 +3,10 @@ package net.artelnatif.nicko; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.ProtocolLibrary; import com.comphenix.protocol.ProtocolManager; -import com.comphenix.protocol.events.*; +import com.comphenix.protocol.events.ListenerPriority; +import com.comphenix.protocol.events.PacketAdapter; +import com.comphenix.protocol.events.PacketContainer; +import com.comphenix.protocol.events.PacketEvent; import net.artelnatif.nicko.command.NickoCommand; import net.artelnatif.nicko.config.Configuration; import net.artelnatif.nicko.config.ConfigurationManager; @@ -17,6 +20,7 @@ import net.artelnatif.nicko.mojang.MojangAPI; import net.artelnatif.nicko.placeholder.PlaceHolderHook; import net.artelnatif.nicko.storage.PlayerDataStore; import net.artelnatif.nicko.storage.name.PlayerNameStore; +import net.artelnatif.nicko.wrapper.WrapperPlayServerRespawn; import org.bukkit.Bukkit; import org.bukkit.Material; import org.bukkit.command.PluginCommand; @@ -29,7 +33,6 @@ import xyz.xenondevs.invui.item.impl.SimpleItem; import java.io.File; import java.io.IOException; -import java.lang.reflect.Field; public class NickoBukkit extends JavaPlugin { private static NickoBukkit plugin; @@ -119,13 +122,20 @@ public class NickoBukkit extends JavaPlugin { @Override public void onPacketSending(PacketEvent event) { final PacketContainer packet = event.getPacket(); - packet.getStructures().getFields().forEach(fieldAccessor -> { - final Field field = fieldAccessor.getField(); - getLogger().info("field=[" + - "name=" + field.getName() + "," + - "type=" + field.getType().getSimpleName() + - "]"); - }); + final WrapperPlayServerRespawn respawn = new WrapperPlayServerRespawn(packet); + getLogger().info(respawn.getDimension().getName()); + getLogger().info(String.valueOf(respawn.isCopyMetadata())); + getLogger().info(String.valueOf(respawn.getSeed())); + getLogger().info(String.valueOf(respawn.getLastDeathLocation().isPresent())); + /** + * packet.getStructures().getFields().forEach(fieldAccessor -> { + * final Field field = fieldAccessor.getField(); + * getLogger().info("field=[" + + * "name=" + field.getName() + "," + + * "type=" + field.getType().getSimpleName() + + * "]"); + * }); + */ } }); diff --git a/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java b/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java index 9c82225..93e3841 100644 --- a/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java +++ b/src/main/java/net/artelnatif/nicko/disguise/AppearanceManager.java @@ -139,16 +139,22 @@ public class AppearanceManager { private void respawnPlayer() { Bukkit.broadcastMessage("Respawning player"); + final World world = player.getWorld(); final WrapperPlayServerRespawn respawn = new WrapperPlayServerRespawn(); respawn.setGameMode(player.getGameMode()); + respawn.setPreviousGameMode(player.getGameMode()); respawn.setDifficulty(world.getDifficulty()); respawn.setDimension(world); respawn.setSeed(world.getSeed()); respawn.setLastDeathLocation(player.getLocation()); + respawn.setCopyMetadata(false); respawn.getHandle().getBooleans().write(0, false); // is debug respawn.getHandle().getBooleans().write(1, false); // 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);*/ } private void updateTabList(WrappedGameProfile gameProfile, String displayName) { diff --git a/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java b/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java index 6ac26ee..a8a855a 100644 --- a/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java +++ b/src/main/java/net/artelnatif/nicko/wrapper/WrapperPlayServerRespawn.java @@ -2,10 +2,8 @@ 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 org.bukkit.Difficulty; import org.bukkit.GameMode; @@ -28,6 +26,8 @@ public class WrapperPlayServerRespawn extends AbstractPacket { handle.getModifier().writeDefaults(); } + public WrapperPlayServerRespawn(PacketContainer container) { super(container, TYPE); } + //............. // Dimension Field (1.8 - Present) // The dimension field has changed numerous times: @@ -42,11 +42,7 @@ public class WrapperPlayServerRespawn extends AbstractPacket { public World getDimension() { if (MinecraftVersion.WILD_UPDATE.atOrAbove()) { - // 1.19 and above - return handle.getHolders( - MinecraftReflection.getDimensionManager(), - BukkitConverters.getDimensionConverter() - ).read(0); + return handle.getWorldKeys().read(0); } return handle.getDimensionTypes().read(0); @@ -58,7 +54,7 @@ public class WrapperPlayServerRespawn extends AbstractPacket { handle.getWorldKeys().write(0, value); return; } - // 1.18 and below + handle.getDimensionTypes().write(0, value); } @@ -74,6 +70,30 @@ public class WrapperPlayServerRespawn extends AbstractPacket { handle.getGameModes().write(0, EnumWrappers.NativeGameMode.fromBukkit(value)); } + //............. + // Previous GameMode Field + //............. + + public void getPreviousGameMode() { + handle.getGameModes().read(1); + } + + public void setPreviousGameMode(GameMode value) { + handle.getGameModes().write(1, EnumWrappers.NativeGameMode.fromBukkit(value)); + } + + //............. + // Copy Metadata Field + //............. + + public boolean isCopyMetadata() { + return handle.getBytes().read(0) != 0; + } + + public void setCopyMetadata(boolean value) { + handle.getBytes().write(0, ((byte) (value ? 1 : 0))); + } + //............. // Last death location Field // Added in 1.19.