diff --git a/src/main/java/ru/nanit/limbo/protocol/ByteMessage.java b/src/main/java/ru/nanit/limbo/protocol/ByteMessage.java index 49facd1..464da16 100644 --- a/src/main/java/ru/nanit/limbo/protocol/ByteMessage.java +++ b/src/main/java/ru/nanit/limbo/protocol/ByteMessage.java @@ -166,7 +166,8 @@ public class ByteMessage extends ByteBuf { for (CompoundBinaryTag tag : compoundTags) { BinaryTagIO.writer().write(tag, (OutputStream) stream); } - } catch (IOException e) { + } + catch (IOException e) { throw new EncoderException("Cannot write NBT CompoundTag"); } } @@ -174,7 +175,8 @@ public class ByteMessage extends ByteBuf { public CompoundBinaryTag readCompoundTag() { try (ByteBufInputStream stream = new ByteBufInputStream(buf)) { return BinaryTagIO.reader().read((InputStream) stream); - } catch (IOException thrown) { + } + catch (IOException thrown) { throw new DecoderException("Cannot read NBT CompoundTag"); } } @@ -182,11 +184,27 @@ public class ByteMessage extends ByteBuf { public void writeCompoundTag(CompoundBinaryTag compoundTag) { try (ByteBufOutputStream stream = new ByteBufOutputStream(buf)) { BinaryTagIO.writer().write(compoundTag, (OutputStream) stream); - } catch (IOException e) { + } + catch (IOException e) { throw new EncoderException("Cannot write NBT CompoundTag"); } } + public void writeProperties(Property[] properties) { + writeVarInt(properties.length); + for (Property prop : properties) { + writeString(prop.getName()); + writeString(prop.getValue()); + if (prop.getSignature() != null) { + buf.writeBoolean(true); + writeString(prop.getSignature()); + } + else { + buf.writeBoolean(false); + } + } + } + /* Delegated methods */ @Override diff --git a/src/main/java/ru/nanit/limbo/protocol/Property.java b/src/main/java/ru/nanit/limbo/protocol/Property.java new file mode 100644 index 0000000..5c11256 --- /dev/null +++ b/src/main/java/ru/nanit/limbo/protocol/Property.java @@ -0,0 +1,38 @@ +package ru.nanit.limbo.protocol; + +public class Property { + + private String name; + private String value; + private String signature; + + public Property(String name, String value, String signature) { + this.name = name; + this.value = value; + this.signature = signature; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getValue() { + return value; + } + + public void setValue(String value) { + this.value = value; + } + + public String getSignature() { + return signature; + } + + public void setSignature(String signature) { + this.signature = signature; + } +} diff --git a/src/main/java/ru/nanit/limbo/protocol/packets/login/PacketLoginSuccess.java b/src/main/java/ru/nanit/limbo/protocol/packets/login/PacketLoginSuccess.java index 61999ba..1b317f7 100644 --- a/src/main/java/ru/nanit/limbo/protocol/packets/login/PacketLoginSuccess.java +++ b/src/main/java/ru/nanit/limbo/protocol/packets/login/PacketLoginSuccess.java @@ -19,6 +19,7 @@ package ru.nanit.limbo.protocol.packets.login; import ru.nanit.limbo.protocol.ByteMessage; import ru.nanit.limbo.protocol.PacketOut; +import ru.nanit.limbo.protocol.Property; import ru.nanit.limbo.protocol.registry.Version; import java.util.UUID; @@ -44,6 +45,9 @@ public class PacketLoginSuccess implements PacketOut { msg.writeString(uuid.toString()); } msg.writeString(username); + if (version.moreOrEqual(Version.V1_19)) { + msg.writeProperties(new Property[0]); + } } @Override