From fcc45903969e8fadc09afa20691d60272b8554e6 Mon Sep 17 00:00:00 2001 From: ineanto Date: Sun, 3 Dec 2023 23:25:42 +0100 Subject: [PATCH] fix: players appearing as allays --- .../java/xyz/atnrch/nicko/NickoBukkit.java | 10 ++- .../WrapperPlayServerEntityDestroy.java | 2 +- .../wrapper/WrapperPlayServerRespawn.java | 36 ++++---- .../wrapper/WrapperPlayServerSpawnEntity.java | 87 ++----------------- .../WrapperPlayerServerPlayerInfo.java | 6 +- .../WrapperPlayerServerPlayerInfoRemove.java | 2 +- 6 files changed, 37 insertions(+), 106 deletions(-) diff --git a/src/main/java/xyz/atnrch/nicko/NickoBukkit.java b/src/main/java/xyz/atnrch/nicko/NickoBukkit.java index 59a3715..bace7b2 100644 --- a/src/main/java/xyz/atnrch/nicko/NickoBukkit.java +++ b/src/main/java/xyz/atnrch/nicko/NickoBukkit.java @@ -51,10 +51,6 @@ public class NickoBukkit extends JavaPlugin { public void onEnable() { plugin = this; - if (!MinecraftVersion.VILLAGE_UPDATE.atOrAbove()) { - getLogger().severe("This version (" + MinecraftVersion.getCurrentVersion().getVersion() + ") is not supported by Nicko!"); - } - configurationManager = new ConfigurationManager(getDataFolder()); configurationManager.saveDefaultConfig(); @@ -62,6 +58,12 @@ public class NickoBukkit extends JavaPlugin { dataStore = new PlayerDataStore(mojangAPI, getNickoConfig()); nameStore = new PlayerNameStore(); + if (!MinecraftVersion.VILLAGE_UPDATE.atOrAbove()) { + getLogger().severe("This version (" + MinecraftVersion.getCurrentVersion().getVersion() + ") is not supported by Nicko!"); + dataStore.getStorage().setError(true); + Bukkit.getPluginManager().disablePlugin(this); + } + getLogger().info("Loading persistence..."); if (!dataStore.getStorage().getProvider().init()) { dataStore.getStorage().setError(true); diff --git a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerEntityDestroy.java b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerEntityDestroy.java index 38f9067..2699619 100644 --- a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerEntityDestroy.java +++ b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerEntityDestroy.java @@ -35,7 +35,7 @@ public class WrapperPlayServerEntityDestroy extends AbstractPacket { * @param value New value for field 'entityIds' */ public void setEntityIds(IntList value) { - this.handle.getModifier().withType(IntList.class, Converters.passthrough(IntList.class)).write(0, value); + this.handle.getModifier().withType(IntList.class, Converters.passthrough(IntList.class)).writeSafely(0, value); } } \ 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 8d395cc..3d0ed53 100644 --- a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java +++ b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerRespawn.java @@ -52,65 +52,65 @@ public class WrapperPlayServerRespawn extends AbstractPacket { if (MinecraftVersion.CONFIG_PHASE_PROTOCOL_UPDATE.atOrAbove()) { // 1.20.2 final InternalStructure dimensionType = commonPlayerSpawnInfoStructure.getStructures().read(0); - dimensionType.getMinecraftKeys().write(0, new MinecraftKey("minecraft", "dimension_type")); - dimensionType.getMinecraftKeys().write(1, new MinecraftKey("minecraft", "overworld")); - commonPlayerSpawnInfoStructure.getStructures().write(0, dimensionType); - commonPlayerSpawnInfoStructure.getWorldKeys().write(0, value); + dimensionType.getMinecraftKeys().writeSafely(0, new MinecraftKey("minecraft", "dimension_type")); + dimensionType.getMinecraftKeys().writeSafely(1, new MinecraftKey("minecraft", "overworld")); + commonPlayerSpawnInfoStructure.getStructures().writeSafely(0, dimensionType); + commonPlayerSpawnInfoStructure.getWorldKeys().writeSafely(0, value); } else if (MinecraftVersion.WILD_UPDATE.atOrAbove()) { // 1.19 to 1.20.1 // Thank you lukalt! final InternalStructure dimensionType = handle.getStructures().read(0); - dimensionType.getMinecraftKeys().write(0, new MinecraftKey("minecraft", "dimension_type")); - dimensionType.getMinecraftKeys().write(1, new MinecraftKey("minecraft", "overworld")); - handle.getStructures().write(0, dimensionType); - handle.getWorldKeys().write(0, value); + dimensionType.getMinecraftKeys().writeSafely(0, new MinecraftKey("minecraft", "dimension_type")); + dimensionType.getMinecraftKeys().writeSafely(1, new MinecraftKey("minecraft", "overworld")); + handle.getStructures().writeSafely(0, dimensionType); + handle.getWorldKeys().writeSafely(0, value); } else if (MinecraftVersion.CAVES_CLIFFS_2.atOrAbove()) { // 1.18 handle.getHolders( MinecraftReflection.getDimensionManager(), BukkitConverters.getDimensionConverter() - ).write(0, value); + ).writeSafely(0, value); } else { // 1.17 and below (untested) - handle.getDimensions().write(0, value.getEnvironment().ordinal()); + handle.getDimensions().writeSafely(0, value.getEnvironment().ordinal()); } } public void setGameMode(GameMode value) { if (MinecraftVersion.CONFIG_PHASE_PROTOCOL_UPDATE.atOrAbove()) { - commonPlayerSpawnInfoStructure.getGameModes().write(0, EnumWrappers.NativeGameMode.fromBukkit(value)); + commonPlayerSpawnInfoStructure.getGameModes().writeSafely(0, EnumWrappers.NativeGameMode.fromBukkit(value)); return; } - handle.getGameModes().write(0, EnumWrappers.NativeGameMode.fromBukkit(value)); + handle.getGameModes().writeSafely(0, EnumWrappers.NativeGameMode.fromBukkit(value)); } public void setPreviousGameMode(GameMode value) { if (MinecraftVersion.CONFIG_PHASE_PROTOCOL_UPDATE.atOrAbove()) { - commonPlayerSpawnInfoStructure.getGameModes().write(1, EnumWrappers.NativeGameMode.fromBukkit(value)); + commonPlayerSpawnInfoStructure.getGameModes().writeSafely(1, EnumWrappers.NativeGameMode.fromBukkit(value)); return; } - handle.getGameModes().write(1, EnumWrappers.NativeGameMode.fromBukkit(value)); + handle.getGameModes().writeSafely(1, EnumWrappers.NativeGameMode.fromBukkit(value)); } public void setCopyMetadata(boolean value) { if (MinecraftVersion.CONFIG_PHASE_PROTOCOL_UPDATE.atOrAbove()) return; if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { - handle.getBytes().write(0, ((byte) (value ? 0x01 : 0x00))); + handle.getBytes().writeSafely(0, ((byte) (value ? 0x01 : 0x00))); } else { - handle.getBooleans().write(0, value); + handle.getBooleans().writeSafely(0, value); } } public void setSeed(long value) { if (MinecraftVersion.BEE_UPDATE.atOrAbove() && !MinecraftVersion.CONFIG_PHASE_PROTOCOL_UPDATE.atOrAbove()) { - handle.getLongs().write(0, Hashing.sha256().hashLong(value).asLong()); + handle.getLongs().writeSafely(0, Hashing.sha256().hashLong(value).asLong()); } } public void setDifficulty(Difficulty difficulty) { if (difficulty != null && !MinecraftVersion.VILLAGE_UPDATE.atOrAbove()) { - handle.getDifficulties().write(0, EnumWrappers.Difficulty.valueOf(difficulty.name())); + handle.getDifficulties().writeSafely(0, EnumWrappers.Difficulty.valueOf(difficulty.name())); } } } diff --git a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerSpawnEntity.java b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerSpawnEntity.java index 8a37c41..9e1b8fd 100644 --- a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerSpawnEntity.java +++ b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayServerSpawnEntity.java @@ -3,10 +3,9 @@ package xyz.atnrch.nicko.wrapper; import com.comphenix.protocol.PacketType; import com.comphenix.protocol.events.PacketContainer; import org.bukkit.Location; -import org.bukkit.World; +import org.bukkit.entity.EntityType; import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.UUID; /** @@ -26,31 +25,14 @@ public class WrapperPlayServerSpawnEntity extends AbstractPacket { handle.getModifier().writeDefaults(); } - /** - * Retrieves entity id of the player - * - * @return 'entityId' - */ - public int getEntityId() { - return this.handle.getIntegers().read(0); - } - /** * Sets the entity id of the player * * @param value New value for field 'entityId' */ public void setEntityId(int value) { - this.handle.getIntegers().write(0, value); - } - - /** - * Retrieves the unique id of the player - * - * @return 'playerId' - */ - public UUID getPlayerId() { - return this.handle.getUUIDs().read(0); + this.handle.getIntegers().writeSafely(0, value); + this.handle.getEntityTypeModifier().writeSafely(0, EntityType.PLAYER); } /** @@ -59,16 +41,7 @@ public class WrapperPlayServerSpawnEntity extends AbstractPacket { * @param value New value for field 'playerId' */ public void setPlayerId(UUID value) { - this.handle.getUUIDs().write(0, value); - } - - /** - * Retrieves the value of field 'x' - * - * @return 'x' - */ - public double getX() { - return this.handle.getDoubles().read(0); + this.handle.getUUIDs().writeSafely(0, value); } /** @@ -77,16 +50,7 @@ public class WrapperPlayServerSpawnEntity extends AbstractPacket { * @param value New value for field 'x' */ public void setX(double value) { - this.handle.getDoubles().write(0, value); - } - - /** - * Retrieves the value of field 'y' - * - * @return 'y' - */ - public double getY() { - return this.handle.getDoubles().read(1); + this.handle.getDoubles().writeSafely(0, value); } /** @@ -95,16 +59,7 @@ public class WrapperPlayServerSpawnEntity extends AbstractPacket { * @param value New value for field 'y' */ public void setY(double value) { - this.handle.getDoubles().write(1, value); - } - - /** - * Retrieves the value of field 'z' - * - * @return 'z' - */ - public double getZ() { - return this.handle.getDoubles().read(2); + this.handle.getDoubles().writeSafely(1, value); } /** @@ -116,31 +71,13 @@ public class WrapperPlayServerSpawnEntity extends AbstractPacket { this.handle.getDoubles().write(2, value); } - /** - * Retrieves the discrete rotation around the y-axis (yaw) - * - * @return 'yRot' - */ - public byte getYRotRaw() { - return this.handle.getBytes().read(0); - } - /** * Sets the discrete rotation around the y-axis (yaw) * * @param value New value for field 'yRot' */ public void setYRotRaw(byte value) { - this.handle.getBytes().write(0, value); - } - - /** - * Retrieves the value of field 'xRot' - * - * @return 'xRot' - */ - public byte getXRotRaw() { - return this.handle.getBytes().read(1); + this.handle.getBytes().writeSafely(0, value); } /** @@ -149,11 +86,7 @@ public class WrapperPlayServerSpawnEntity extends AbstractPacket { * @param value New value for field 'xRot' */ public void setXRotRaw(byte value) { - this.handle.getBytes().write(1, value); - } - - public Location getLocation(@Nullable World world) { - return new Location(world, getX(), getY(), getZ(), angleToDegrees(getYRotRaw()), angleToDegrees(getXRotRaw())); + this.handle.getBytes().writeSafely(1, value); } public void setLocation(@Nonnull Location location) { @@ -164,10 +97,6 @@ public class WrapperPlayServerSpawnEntity extends AbstractPacket { setXRotRaw(degreesToAngle(location.getPitch())); } - private float angleToDegrees(byte rawAngle) { - return rawAngle / 256.0F * 360.0F; - } - private byte degreesToAngle(float degree) { return (byte)((int)(degree * 256.0F / 360.0F)); } diff --git a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfo.java b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfo.java index 432019c..ccf7584 100644 --- a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfo.java +++ b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfo.java @@ -25,13 +25,13 @@ public class WrapperPlayerServerPlayerInfo extends AbstractPacket { public void setActions(Set value) { if (MinecraftVersion.FEATURE_PREVIEW_UPDATE.atOrAbove()) { - handle.getPlayerInfoActions().write(0, value); + handle.getPlayerInfoActions().writeSafely(0, value); } else { - handle.getPlayerInfoAction().write(0, value.stream().iterator().next()); // Get the first Value. + handle.getPlayerInfoAction().writeSafely(0, value.stream().iterator().next()); // Get the first Value. } } public void setData(List value) { - handle.getPlayerInfoDataLists().write(1, value); + handle.getPlayerInfoDataLists().writeSafely(1, value); } } diff --git a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfoRemove.java b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfoRemove.java index 5c48f9d..0f3f355 100644 --- a/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfoRemove.java +++ b/src/main/java/xyz/atnrch/nicko/wrapper/WrapperPlayerServerPlayerInfoRemove.java @@ -22,6 +22,6 @@ public class WrapperPlayerServerPlayerInfoRemove extends AbstractPacket { } public void setUUIDs(List value) { - handle.getUUIDLists().write(0, value); + handle.getUUIDLists().writeSafely(0, value); } }