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 6c5ff1854..b6ca3e80e 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 @@ -627,24 +627,22 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter soundEvent; - final Tag soundEventTag = instrument.get("sound_event"); - if (soundEventTag instanceof IntTag) { - soundEvent = Holder.of(((IntTag) soundEventTag).asInt()); - } else if (soundEventTag instanceof CompoundTag) { - final CompoundTag soundEventCompound = (CompoundTag) soundEventTag; - final StringTag identifier = soundEventCompound.getStringTag("identifier"); + final Holder soundEvent; + final CompoundTag soundEventTag = instrument.getCompoundTag("sound_event"); + if (soundEventTag != null) { + final StringTag identifier = soundEventTag.getStringTag("identifier"); if (identifier == null) { return; } + soundEvent = Holder.of(new SoundEvent( identifier.getValue(), - soundEventCompound.contains("fixed_range") ? - soundEventCompound.getFloat("fixed_range") : null + soundEventTag.contains("fixed_range") ? soundEventTag.getFloat("fixed_range") : null )); } else { - return; + soundEvent = Holder.of(instrument.getInt("sound_event")); } + data.set(StructuredDataKey.INSTRUMENT, Holder.of(new Instrument(soundEvent, useDuration, range))); } @@ -665,6 +663,7 @@ public final class BlockItemPacketRewriter1_20_5 extends ItemRewriter patternLayer = new ArrayList<>(); for (final CompoundTag tag : bannerPatterns) { final CompoundTag patternTag = tag.getCompoundTag("pattern"); - if (patternTag == null) { - continue; + final Holder pattern; + if (patternTag != null) { + final String assetId = patternTag.getString("asset_id"); + final String translationKey = patternTag.getString("translation_key"); + pattern = Holder.of(new BannerPattern(assetId, translationKey)); + } else { + pattern = Holder.of(tag.getInt("pattern")); } - final String assetId = patternTag.getString("asset_id"); - final String translationKey = patternTag.getString("translation_key"); final int dyeColor = tag.getInt("dye_color"); - patternLayer.add(new BannerPatternLayer(Holder.of(new BannerPattern(assetId, translationKey)), dyeColor)); + patternLayer.add(new BannerPatternLayer(pattern, dyeColor)); } data.set(StructuredDataKey.BANNER_PATTERNS, patternLayer.toArray(new BannerPatternLayer[0])); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/StructuredDataConverter.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/StructuredDataConverter.java index 978b008c4..008975de9 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/StructuredDataConverter.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/rewriter/StructuredDataConverter.java @@ -61,7 +61,6 @@ import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.PotionEff import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.Potions1_20_5; import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.data.TrimMaterials1_20_3; import com.viaversion.viaversion.util.ComponentUtil; -import com.viaversion.viaversion.util.Key; import com.viaversion.viaversion.util.UUIDUtil; import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; @@ -436,11 +435,16 @@ public final class StructuredDataConverter { final ListTag originalPatterns = new ListTag<>(CompoundTag.class); for (final BannerPatternLayer layer : data) { final CompoundTag layerTag = new CompoundTag(); - final CompoundTag patternTag = new CompoundTag(); - final BannerPattern pattern = layer.pattern().value(); - patternTag.putString("asset_id", pattern.assetId()); - patternTag.putString("translation_key", pattern.translationKey()); - layerTag.put("pattern", patternTag); + if (layer.pattern().isDirect()) { + final CompoundTag patternTag = new CompoundTag(); + final BannerPattern pattern = layer.pattern().value(); + patternTag.putString("asset_id", pattern.assetId()); + patternTag.putString("translation_key", pattern.translationKey()); + layerTag.put("pattern", patternTag); + } else { + layerTag.putInt("pattern", layer.pattern().id()); + } + layerTag.putInt("dye_color", layer.dyeColor()); originalPatterns.add(layerTag); }