diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/data/StructuredDataKey.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/data/StructuredDataKey.java index a6bf680d3..1a0bcbe5d 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/minecraft/data/StructuredDataKey.java +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/data/StructuredDataKey.java @@ -82,7 +82,7 @@ public final class StructuredDataKey { public static final StructuredDataKey BUCKET_ENTITY_DATA = new StructuredDataKey<>("bucket_entity_data", Type.COMPOUND_TAG); public static final StructuredDataKey BLOCK_ENTITY_DATA = new StructuredDataKey<>("block_entity_data", Type.COMPOUND_TAG); public static final StructuredDataKey> INSTRUMENT = new StructuredDataKey<>("instrument", Instrument.TYPE); - public static final StructuredDataKey RECIPES = new StructuredDataKey<>("recipes", Type.STRING_ARRAY); + public static final StructuredDataKey RECIPES = new StructuredDataKey<>("recipes", Type.TAG); public static final StructuredDataKey LODESTONE_TRACKER = new StructuredDataKey<>("lodestone_tracker", LodestoneTracker.TYPE); public static final StructuredDataKey FIREWORK_EXPLOSION = new StructuredDataKey<>("firework_explosion", FireworkExplosion.TYPE); public static final StructuredDataKey FIREWORKS = new StructuredDataKey<>("fireworks", Fireworks.TYPE); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java index 01e027a77..8d294dc60 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/BlockItemPacketRewriter1_20_5.java @@ -25,6 +25,7 @@ import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.api.data.ParticleMappings; import com.viaversion.viaversion.api.minecraft.GameProfile; +import com.viaversion.viaversion.api.minecraft.GlobalPosition; import com.viaversion.viaversion.api.minecraft.Particle; import com.viaversion.viaversion.api.minecraft.data.StructuredData; import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer; @@ -38,6 +39,7 @@ import com.viaversion.viaversion.api.minecraft.item.data.Enchantments; import com.viaversion.viaversion.api.minecraft.item.data.FilterableComponent; import com.viaversion.viaversion.api.minecraft.item.data.FilterableString; import com.viaversion.viaversion.api.minecraft.item.data.FireworkExplosion; +import com.viaversion.viaversion.api.minecraft.item.data.LodestoneTracker; import com.viaversion.viaversion.api.minecraft.item.data.WrittenBook; import com.viaversion.viaversion.api.type.Type; import com.viaversion.viaversion.api.type.types.chunk.ChunkType1_20_2; @@ -274,6 +276,11 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter recipesTag = tag.getListTag("Recipes", StringTag.class); + if (recipesTag != null) { + data.set(StructuredDataKey.RECIPES, recipesTag); + } + + final CompoundTag lodestonePosTag = tag.getCompoundTag("LodestonePos"); + final StringTag lodestoneDimensionTag = tag.getStringTag("LodestoneDimension"); + if (lodestonePosTag != null && lodestoneDimensionTag != null) { + final NumberTag trackedTag = tag.getNumberTag("LodestoneTracked"); + final NumberTag xTag = lodestonePosTag.getNumberTag("X"); + final NumberTag yTag = lodestonePosTag.getNumberTag("Y"); + final NumberTag zTag = lodestonePosTag.getNumberTag("Z"); + final GlobalPosition position = new GlobalPosition( + lodestoneDimensionTag.getValue(), + xTag != null ? xTag.asInt() : 0, + yTag != null ? yTag.asInt() : 0, + zTag != null ? zTag.asInt() : 0 + ); + data.set(StructuredDataKey.LODESTONE_TRACKER, new LodestoneTracker(position, trackedTag != null && trackedTag.asBoolean())); + } + + if (old.identifier() == 1085) { + updateWritableBookPages(data, tag); + } else if (old.identifier() == 1086) { + updateWrittenBookPages(data, tag); + } updateItemList(data, tag, "ChargedProjectiles", StructuredDataKey.CHARGED_PROJECTILES); updateItemList(data, tag, "Items", StructuredDataKey.BUNDLE_CONTENTS); @@ -333,16 +364,12 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter pagesTag = tag.getListTag("pages", StringTag.class); final CompoundTag filteredPagesTag = tag.getCompoundTag("filtered_pages"); if (pagesTag == null) { return; @@ -370,11 +397,7 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter pages = new ArrayList<>(); for (int i = 0; i < pagesTag.size(); i++) { - final Tag page = pagesTag.get(i); - if (!(page instanceof StringTag)) { - continue; - } - + final StringTag page = pagesTag.get(i); String filtered = null; if (filteredPagesTag != null) { final StringTag filteredPage = filteredPagesTag.getStringTag(String.valueOf(i)); @@ -382,14 +405,14 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter pagesTag = tag.getListTag("pages", StringTag.class); final CompoundTag filteredPagesTag = tag.getCompoundTag("filtered_pages"); if (pagesTag == null) { return; @@ -397,11 +420,7 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter pages = new ArrayList<>(); for (int i = 0; i < pagesTag.size(); i++) { - final Tag page = pagesTag.get(i); - if (!(page instanceof StringTag)) { - continue; - } - + final StringTag page = pagesTag.get(i); Tag filtered = null; if (filteredPagesTag != null) { final StringTag filteredPage = filteredPagesTag.getStringTag(String.valueOf(i)); @@ -410,7 +429,7 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter dataKey) { - final ListTag chargedProjectiles = tag.getListTag(key); + final ListTag chargedProjectiles = tag.getListTag(key, CompoundTag.class); if (chargedProjectiles == null) { return; } final List items = new ArrayList<>(); - for (final Tag item : chargedProjectiles) { - if (!(item instanceof CompoundTag)) { - continue; - } - items.add(itemFromTag((CompoundTag) item)); + for (final CompoundTag item : chargedProjectiles) { + items.add(itemFromTag(item)); } data.set(dataKey, items.toArray(new Item[0])); } @@ -573,13 +589,11 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter loreTag = displayTag.getListTag("Lore", StringTag.class); if (loreTag != null) { final List updatedLore = new ArrayList<>(); - for (final Tag loreEntry : loreTag) { - if (loreEntry instanceof StringTag) { - updatedLore.add(ComponentUtil.jsonStringToTag(((StringTag) loreEntry).getValue())); - } + for (final StringTag loreEntry : loreTag) { + updatedLore.add(ComponentUtil.jsonStringToTag((loreEntry.getValue()))); } data.set(StructuredDataKey.LORE, updatedLore.toArray(new Tag[0])); }