From fe8a230abb07dfe904de2acc6646bf619d952543 Mon Sep 17 00:00:00 2001 From: mworzala Date: Tue, 30 Apr 2024 16:50:46 -0400 Subject: [PATCH] fix: correct entity opt_block_state metadata serializer --- .../java/net/minestom/server/entity/Metadata.java | 15 +++++++++++++-- .../minestom/server/network/NetworkBuffer.java | 1 - 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/Metadata.java b/src/main/java/net/minestom/server/entity/Metadata.java index 4de2509d9..fbceea359 100644 --- a/src/main/java/net/minestom/server/entity/Metadata.java +++ b/src/main/java/net/minestom/server/entity/Metadata.java @@ -81,12 +81,23 @@ public final class Metadata { return new MetadataImpl.EntryImpl<>(TYPE_OPTUUID, value, NetworkBuffer.OPT_UUID); } - public static Entry BlockState(@Nullable Integer value) { + public static Entry BlockState(@NotNull Integer value) { return new MetadataImpl.EntryImpl<>(TYPE_BLOCKSTATE, value, NetworkBuffer.BLOCK_STATE); } public static Entry OptBlockState(@Nullable Integer value) { - return new MetadataImpl.EntryImpl<>(TYPE_OPTBLOCKSTATE, value, NetworkBuffer.OPT_BLOCK_STATE); + return new MetadataImpl.EntryImpl<>(TYPE_OPTBLOCKSTATE, value, new NetworkBuffer.Type<>() { + @Override + public void write(@NotNull NetworkBuffer buffer, Integer value) { + buffer.write(NetworkBuffer.VAR_INT, value == null ? 0 : value); + } + + @Override + public Integer read(@NotNull NetworkBuffer buffer) { + int value = buffer.read(NetworkBuffer.VAR_INT); + return value == 0 ? null : value; + } + }); } public static Entry NBT(@NotNull NBT nbt) { diff --git a/src/main/java/net/minestom/server/network/NetworkBuffer.java b/src/main/java/net/minestom/server/network/NetworkBuffer.java index d41c6cd43..6745713ec 100644 --- a/src/main/java/net/minestom/server/network/NetworkBuffer.java +++ b/src/main/java/net/minestom/server/network/NetworkBuffer.java @@ -64,7 +64,6 @@ public final class NetworkBuffer { public static final Type OPT_CHAT = NetworkBufferTypeImpl.fromOptional(COMPONENT); public static final Type OPT_BLOCK_POSITION = NetworkBufferTypeImpl.fromOptional(BLOCK_POSITION); public static final Type OPT_UUID = NetworkBufferTypeImpl.fromOptional(UUID); - public static final Type OPT_BLOCK_STATE = NetworkBufferTypeImpl.fromOptional(BLOCK_STATE); public static final Type DIRECTION = NetworkBufferTypeImpl.fromEnum(Direction.class); public static final Type POSE = NetworkBufferTypeImpl.fromEnum(Entity.Pose.class);