diff --git a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsStructuredItemRewriter.java b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsStructuredItemRewriter.java index f766de51..fa68a9f4 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsStructuredItemRewriter.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/BackwardsStructuredItemRewriter.java @@ -17,6 +17,10 @@ */ package com.viaversion.viabackwards.api.rewriters; +import com.viaversion.nbt.tag.CompoundTag; +import com.viaversion.nbt.tag.IntTag; +import com.viaversion.nbt.tag.NumberTag; +import com.viaversion.nbt.tag.Tag; import com.viaversion.viabackwards.api.BackwardsProtocol; import com.viaversion.viabackwards.api.data.BackwardsMappingData; import com.viaversion.viabackwards.api.data.MappedItem; @@ -28,10 +32,6 @@ import com.viaversion.viaversion.api.minecraft.item.Item; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.packet.ServerboundPacketType; import com.viaversion.viaversion.api.type.Type; -import com.viaversion.nbt.tag.CompoundTag; -import com.viaversion.nbt.tag.IntTag; -import com.viaversion.nbt.tag.NumberTag; -import com.viaversion.nbt.tag.Tag; import org.checkerframework.checker.nullness.qual.Nullable; public class BackwardsStructuredItemRewriter customData = item.structuredData().getNonEmpty(StructuredDataKey.CUSTOM_DATA); + final StructuredData customData = item.dataContainer().getNonEmpty(StructuredDataKey.CUSTOM_DATA); return customData != null ? customData.value() : null; } protected CompoundTag createCustomTag(final Item item) { - final StructuredDataContainer data = item.structuredData(); + final StructuredDataContainer data = item.dataContainer(); final StructuredData customData = data.getNonEmpty(StructuredDataKey.CUSTOM_DATA); if (customData != null) { return customData.value(); @@ -156,7 +156,7 @@ public class BackwardsStructuredItemRewriter customData = data.getNonEmpty(StructuredDataKey.CUSTOM_DATA); if (customData == null) { return; diff --git a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/StructuredEnchantmentRewriter.java b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/StructuredEnchantmentRewriter.java index 21a0c997..0c1d8a5d 100644 --- a/common/src/main/java/com/viaversion/viabackwards/api/rewriters/StructuredEnchantmentRewriter.java +++ b/common/src/main/java/com/viaversion/viabackwards/api/rewriters/StructuredEnchantmentRewriter.java @@ -47,13 +47,13 @@ public class StructuredEnchantmentRewriter { } public void handleToClient(final Item item) { - final StructuredDataContainer data = item.structuredData(); + final StructuredDataContainer data = item.dataContainer(); rewriteEnchantmentsToClient(data, StructuredDataKey.ENCHANTMENTS, false); rewriteEnchantmentsToClient(data, StructuredDataKey.STORED_ENCHANTMENTS, true); } public void handleToServer(final Item item) { - final StructuredDataContainer data = item.structuredData(); + final StructuredDataContainer data = item.dataContainer(); final StructuredData customData = data.getNonEmpty(StructuredDataKey.CUSTOM_DATA); if (customData == null) { return; diff --git a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java index 78afc206..52ab1714 100644 --- a/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java +++ b/common/src/main/java/com/viaversion/viabackwards/protocol/v1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java @@ -30,6 +30,7 @@ import com.viaversion.viaversion.api.minecraft.Particle; import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer; import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey; import com.viaversion.viaversion.api.minecraft.item.Item; +import com.viaversion.viaversion.api.minecraft.item.StructuredItem; import com.viaversion.viaversion.api.minecraft.item.data.FireworkExplosion; import com.viaversion.viaversion.api.minecraft.item.data.Fireworks; import com.viaversion.viaversion.api.type.Types; @@ -162,8 +163,11 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem final Item result = handleItemToClient(wrapper.user(), wrapper.read(Types1_20_5.ITEM)); wrapper.write(Types.ITEM1_20_2, result); - final Item secondInput = handleItemToClient(wrapper.user(), wrapper.read(Types1_20_5.OPTIONAL_ITEM_COST)); - cleanInput(secondInput); + Item secondInput = wrapper.read(Types1_20_5.OPTIONAL_ITEM_COST); + if (secondInput != null) { + secondInput = handleItemToClient(wrapper.user(), secondInput); + cleanInput(secondInput); + } wrapper.write(Types.ITEM1_20_2, secondInput); wrapper.passthrough(Types.BOOLEAN); // Out of stock @@ -319,13 +323,16 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem } @Override - public @Nullable Item handleItemToClient(final UserConnection connection, @Nullable final Item item) { - if (item == null) return null; + public @Nullable Item handleItemToClient(final UserConnection connection, final Item item) { + if (item.isEmpty()) { + // Back to null for the older protocols + return null; + } super.handleItemToClient(connection, item); // In 1.20.6, some items have default values which are not written into the components - final StructuredDataContainer data = item.structuredData(); + final StructuredDataContainer data = item.dataContainer(); if (item.identifier() == 1105 && !data.contains(StructuredDataKey.FIREWORKS)) { data.set(StructuredDataKey.FIREWORKS, new Fireworks(1, new FireworkExplosion[0])); } @@ -339,8 +346,11 @@ public final class BlockItemPacketRewriter1_20_5 extends BackwardsStructuredItem } @Override - public @Nullable Item handleItemToServer(final UserConnection connection, @Nullable final Item item) { - if (item == null) return null; + public Item handleItemToServer(final UserConnection connection, @Nullable final Item item) { + if (item == null) { + // Unify as empty going forward + return StructuredItem.empty(); + } // Convert to structured item first final Item structuredItem = vvProtocol.getItemRewriter().toStructuredItem(connection, item);