diff --git a/src/main/java/net/minestom/server/network/ComponentNetworkBufferTypeImpl.java b/src/main/java/net/minestom/server/network/ComponentNetworkBufferTypeImpl.java index 35e4cf805..3fcacd3fb 100644 --- a/src/main/java/net/minestom/server/network/ComponentNetworkBufferTypeImpl.java +++ b/src/main/java/net/minestom/server/network/ComponentNetworkBufferTypeImpl.java @@ -221,7 +221,8 @@ record ComponentNetworkBufferTypeImpl() implements NetworkBufferTypeImpl hoverEvent) { + @SuppressWarnings("unchecked") + private void writeHoverEvent(@NotNull NetworkBuffer buffer, @NotNull HoverEvent hoverEvent) { buffer.write(BYTE, TAG_COMPOUND); writeUtf(buffer, "hoverEvent"); @@ -279,9 +280,9 @@ record ComponentNetworkBufferTypeImpl() implements NetworkBufferTypeImpl= 0x80 || c == 0) break; - buffer.nioBuffer.put(buffer.writeIndex++, (byte) c); + impl._putByte(buffer.writeIndex(), (byte) c); + impl.advanceWrite(1); } for (; i < strlen; i++) { int c = str.charAt(i); if (c < 0x80 && c != 0) { - buffer.nioBuffer.put(buffer.writeIndex++, (byte) c); + impl._putByte(buffer.writeIndex(), (byte) c); + impl.advanceWrite(1); } else if (c >= 0x800) { - buffer.nioBuffer.put(buffer.writeIndex++, (byte) (0xE0 | ((c >> 12) & 0x0F))); - buffer.nioBuffer.put(buffer.writeIndex++, (byte) (0x80 | ((c >> 6) & 0x3F))); - buffer.nioBuffer.put(buffer.writeIndex++, (byte) (0x80 | ((c >> 0) & 0x3F))); + impl._putByte(buffer.writeIndex(), (byte) (0xE0 | ((c >> 12) & 0x0F))); + impl._putByte(buffer.writeIndex() + 1, (byte) (0x80 | ((c >> 6) & 0x3F))); + impl._putByte(buffer.writeIndex() + 2, (byte) (0x80 | ((c >> 0) & 0x3F))); + impl.advanceWrite(3); } else { - buffer.nioBuffer.put(buffer.writeIndex++, (byte) (0xC0 | ((c >> 6) & 0x1F))); - buffer.nioBuffer.put(buffer.writeIndex++, (byte) (0x80 | ((c >> 0) & 0x3F))); + impl._putByte(buffer.writeIndex(), (byte) (0xC0 | ((c >> 6) & 0x1F))); + impl._putByte(buffer.writeIndex() + 1, (byte) (0x80 | ((c >> 0) & 0x3F))); + impl.advanceWrite(2); } } } - } diff --git a/src/main/java/net/minestom/server/network/NetworkBuffer.java b/src/main/java/net/minestom/server/network/NetworkBuffer.java index bef9d2929..316212279 100644 --- a/src/main/java/net/minestom/server/network/NetworkBuffer.java +++ b/src/main/java/net/minestom/server/network/NetworkBuffer.java @@ -48,7 +48,7 @@ public sealed interface NetworkBuffer permits NetworkBufferImpl { @SuppressWarnings({"unchecked", "rawtypes"}) Type NBT_COMPOUND = (Type) new NetworkBufferTypeImpl.NbtType(); Type BLOCK_POSITION = new NetworkBufferTypeImpl.BlockPositionType(); - Type COMPONENT = new NetworkBufferTypeImpl.ComponentType(); + Type COMPONENT = new ComponentNetworkBufferTypeImpl(); Type JSON_COMPONENT = new NetworkBufferTypeImpl.JsonComponentType(); Type UUID = new NetworkBufferTypeImpl.UUIDType(); Type POS = new NetworkBufferTypeImpl.PosType(); diff --git a/src/main/java/net/minestom/server/network/packet/server/play/EntityAttributesPacket.java b/src/main/java/net/minestom/server/network/packet/server/play/EntityAttributesPacket.java index ef645a47b..4bb2f9c18 100644 --- a/src/main/java/net/minestom/server/network/packet/server/play/EntityAttributesPacket.java +++ b/src/main/java/net/minestom/server/network/packet/server/play/EntityAttributesPacket.java @@ -5,7 +5,6 @@ import net.minestom.server.entity.attribute.AttributeModifier; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.NetworkBufferTemplate; import net.minestom.server.network.packet.server.ServerPacket; -import org.jetbrains.annotations.NotNull; import java.util.Collection; import java.util.List; @@ -18,30 +17,26 @@ public record EntityAttributesPacket(int entityId, List properties) im public static final NetworkBuffer.Type SERIALIZER = NetworkBufferTemplate.template( VAR_INT, EntityAttributesPacket::entityId, - Property.NETWORK_TYPE.list(MAX_ENTRIES), EntityAttributesPacket::properties, + Property.SERIALIZER.list(MAX_ENTRIES), EntityAttributesPacket::properties, EntityAttributesPacket::new); public EntityAttributesPacket { properties = List.copyOf(properties); } - public record Property(Attribute attribute, double value, Collection modifiers) { - public static final NetworkBuffer.Type NETWORK_TYPE = new NetworkBuffer.Type<>() { - @Override - public void write(@NotNull NetworkBuffer buffer, Property value) { - buffer.write(Attribute.NETWORK_TYPE, value.attribute); - buffer.write(DOUBLE, value.value); - buffer.writeCollection(AttributeModifier.NETWORK_TYPE, value.modifiers); - } - - @Override - public Property read(@NotNull NetworkBuffer buffer) { - return new Property(buffer.read(Attribute.NETWORK_TYPE), buffer.read(DOUBLE), buffer.readCollection(AttributeModifier.NETWORK_TYPE, Short.MAX_VALUE)); - } - }; + public record Property(Attribute attribute, double value, List modifiers) { + public static final NetworkBuffer.Type SERIALIZER = NetworkBufferTemplate.template( + Attribute.NETWORK_TYPE, Property::attribute, + DOUBLE, Property::value, + AttributeModifier.NETWORK_TYPE.list(), Property::modifiers, + Property::new); public Property { modifiers = List.copyOf(modifiers); } + + public Property(Attribute attribute, double value, Collection modifiers) { + this(attribute, value, List.copyOf(modifiers)); + } } } diff --git a/src/main/java/net/minestom/server/network/player/GameProfile.java b/src/main/java/net/minestom/server/network/player/GameProfile.java index 63ed3d9c2..0ca30cc89 100644 --- a/src/main/java/net/minestom/server/network/player/GameProfile.java +++ b/src/main/java/net/minestom/server/network/player/GameProfile.java @@ -2,7 +2,6 @@ package net.minestom.server.network.player; import net.minestom.server.network.NetworkBuffer; import net.minestom.server.network.NetworkBufferTemplate; -import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -12,7 +11,7 @@ import java.util.UUID; import static net.minestom.server.network.NetworkBuffer.STRING; public record GameProfile(@NotNull UUID uuid, @NotNull String name, - @NotNull List<@NotNull Property> properties) implements NetworkBuffer.Writer { + @NotNull List<@NotNull Property> properties) { public static final int MAX_PROPERTIES = 1024; public GameProfile { diff --git a/src/test/java/net/minestom/server/network/ComponentNetworkBufferTypeTest.java b/src/test/java/net/minestom/server/network/ComponentNetworkBufferTypeTest.java index 54cfca8f4..507f4d475 100644 --- a/src/test/java/net/minestom/server/network/ComponentNetworkBufferTypeTest.java +++ b/src/test/java/net/minestom/server/network/ComponentNetworkBufferTypeTest.java @@ -5,7 +5,6 @@ import net.minestom.server.adventure.serializer.nbt.NbtComponentSerializer; import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.Test; -import java.nio.ByteBuffer; import java.util.List; import static net.minestom.server.network.NetworkBuffer.COMPONENT; @@ -80,7 +79,8 @@ public class ComponentNetworkBufferTypeTest { private static void assertWriteReadEquality(@NotNull Component comp) { var array = NetworkBuffer.makeArray(buffer -> buffer.write(COMPONENT, comp)); - var actual = NBT_READER.deserialize(new NetworkBuffer(ByteBuffer.wrap(array)).read(NBT)); + var buffer = NetworkBuffer.wrap(array, 0, array.length); + var actual = NBT_READER.deserialize(buffer.read(NBT)); assertEquals(comp, actual); } }