From 0dd7dfe2f316d70973d765ff85de6945c0a1ce4a Mon Sep 17 00:00:00 2001 From: FlorianMichael Date: Sun, 9 Jun 2024 15:14:45 +0200 Subject: [PATCH] Handle empty items in pre 1.20.5 protocols Maps empty items to null on read in 1.13, 1.13.2 and 1.20.2 item types and handles the empty item->null transition in 1.10->1.11 --- .../api/type/types/item/ItemType1_13.java | 5 ++++- .../api/type/types/item/ItemType1_13_2.java | 5 ++++- .../api/type/types/item/ItemType1_20_2.java | 5 ++++- .../rewriter/ItemPacketRewriter1_11.java | 4 ++++ .../rewriter/BlockItemPacketRewriter1_20_5.java | 14 ++------------ 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_13.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_13.java index 66787cab1..0ccd8ec99 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_13.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_13.java @@ -44,13 +44,16 @@ public class ItemType1_13 extends Type { item.setIdentifier(id); item.setAmount(buffer.readByte()); item.setTag(Types.NAMED_COMPOUND_TAG.read(buffer)); + if (item.isEmpty()) { + return null; + } return item; } } @Override public void write(ByteBuf buffer, @Nullable Item object) { - if (object == null) { + if (object == null || object.isEmpty()) { buffer.writeShort(-1); } else { buffer.writeShort(object.identifier()); diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_13_2.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_13_2.java index 9be1c23e8..47c6f5382 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_13_2.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_13_2.java @@ -44,13 +44,16 @@ public class ItemType1_13_2 extends Type { item.setIdentifier(Types.VAR_INT.readPrimitive(buffer)); item.setAmount(buffer.readByte()); item.setTag(Types.NAMED_COMPOUND_TAG.read(buffer)); + if (item.isEmpty()) { + return null; + } return item; } } @Override public void write(ByteBuf buffer, @Nullable Item object) { - if (object == null) { + if (object == null || object.isEmpty()) { buffer.writeBoolean(false); } else { buffer.writeBoolean(true); diff --git a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_20_2.java b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_20_2.java index 725038d81..7dd6a7e4b 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_20_2.java +++ b/api/src/main/java/com/viaversion/viaversion/api/type/types/item/ItemType1_20_2.java @@ -45,12 +45,15 @@ public class ItemType1_20_2 extends Type { item.setIdentifier(Types.VAR_INT.readPrimitive(buffer)); item.setAmount(buffer.readByte()); item.setTag(Types.COMPOUND_TAG.read(buffer)); + if (item.isEmpty()) { + return null; + } return item; } @Override public void write(final ByteBuf buffer, @Nullable final Item object) { - if (object == null) { + if (object == null || object.isEmpty()) { buffer.writeBoolean(false); } else { buffer.writeBoolean(true); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/v1_10to1_11/rewriter/ItemPacketRewriter1_11.java b/common/src/main/java/com/viaversion/viaversion/protocols/v1_10to1_11/rewriter/ItemPacketRewriter1_11.java index 489c8c286..accc2de60 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/v1_10to1_11/rewriter/ItemPacketRewriter1_11.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/v1_10to1_11/rewriter/ItemPacketRewriter1_11.java @@ -74,6 +74,10 @@ public class ItemPacketRewriter1_11 extends ItemRewriter