From 8edad673948aeafd78cfbb533f88cce9b822eae6 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Sat, 2 Mar 2024 20:13:58 +0100 Subject: [PATCH 1/5] Check if the channel is open in BukkitEncodeHandler --- .../viaversion/bukkit/handlers/BukkitEncodeHandler.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/handlers/BukkitEncodeHandler.java b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/handlers/BukkitEncodeHandler.java index 7ecfcb2fd..1147ad407 100644 --- a/bukkit/src/main/java/com/viaversion/viaversion/bukkit/handlers/BukkitEncodeHandler.java +++ b/bukkit/src/main/java/com/viaversion/viaversion/bukkit/handlers/BukkitEncodeHandler.java @@ -43,7 +43,8 @@ public final class BukkitEncodeHandler extends MessageToMessageEncoder @Override protected void encode(final ChannelHandlerContext ctx, final ByteBuf bytebuf, final List out) throws Exception { - if (!connection.checkClientboundPacket()) { + // Check if the channel is open as older servers might start sending packets through the pipeline despite the channel being closed + if (!connection.checkClientboundPacket() || !ctx.channel().isOpen()) { throw CancelEncoderException.generate(null); } if (!connection.shouldTransformPacket()) { From 1f5ee6d763202c563c77386b622717adda11c266 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Mon, 4 Mar 2024 17:32:13 +0100 Subject: [PATCH 2/5] Create FUNDING.yml --- .github/FUNDING.yml | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 .github/FUNDING.yml diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml new file mode 100644 index 000000000..b1361d123 --- /dev/null +++ b/.github/FUNDING.yml @@ -0,0 +1,2 @@ +github: kennytv +patreon: kennytv From f6d48e258fd43c8fb1d6511553fa4b1e2d065d17 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Tue, 5 Mar 2024 17:51:09 +0100 Subject: [PATCH 3/5] 4.9.3 Release --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 13b295806..fc02dcc2e 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Project properties - we put these here so they can be modified without causing a recompile of the build scripts -projectVersion=4.9.3-SNAPSHOT +projectVersion=4.9.3 # Smile emoji mcVersions=1.20.4, 1.20.3, 1.20.2, 1.20.1, 1.20, 1.19.4, 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.16, 1.15.2, 1.15.1, 1.15, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14, 1.13.2, 1.13.1, 1.13, 1.12.2, 1.12.1, 1.12, 1.11.2, 1.11.1, 1.11, 1.10.2, 1.10.1, 1.10, 1.9.4, 1.9.3, 1.9.2, 1.9.1, 1.9, 1.8.9 From cad78ea68fc6fa94f4fc1608fc996a4b199994ff Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Wed, 6 Mar 2024 12:31:31 +0100 Subject: [PATCH 4/5] Trim string tags in component conversion Somewhat dirty but inconsequential, as the given protocol does not use this method in item conversion and it should only ever be triggered in hover events Closes #3650 --- .../viaversion/util/ComponentUtil.java | 19 +++++- .../viaversion/viaversion/util/TagUtil.java | 58 +++++++++++++++++++ gradle.properties | 2 +- 3 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 common/src/main/java/com/viaversion/viaversion/util/TagUtil.java diff --git a/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java b/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java index d530b120a..47ceac110 100644 --- a/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java +++ b/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java @@ -69,13 +69,30 @@ public final class ComponentUtil { try { final ATextComponent component = TextComponentSerializer.V1_19_4.deserialize(element); - return TextComponentCodec.V1_20_3.serializeNbt(component); + return trimStrings(TextComponentCodec.V1_20_3.serializeNbt(component)); } catch (final Exception e) { Via.getPlatform().getLogger().log(Level.SEVERE, "Error converting component: " + element, e); return new StringTag(""); } } + private static Tag trimStrings(final Tag input) { + // Dirty fix for https://github.com/ViaVersion/ViaVersion/issues/3650 + // Usually tripped by hover event data being too long, e.g. book or shulker box contents + if (input == null) { + return null; + } + return TagUtil.handleDeep(input, (key, tag) -> { + if (tag instanceof StringTag) { + final String value = ((StringTag) tag).getValue(); + if (value.length() > Short.MAX_VALUE) { + ((StringTag) tag).setValue("{}"); + } + } + return tag; + }); + } + public static @Nullable JsonElement convertJson(@Nullable final JsonElement element, final SerializerVersion from, final SerializerVersion to) { return element != null ? convert(from, to, from.jsonSerializer.deserialize(element)) : null; } diff --git a/common/src/main/java/com/viaversion/viaversion/util/TagUtil.java b/common/src/main/java/com/viaversion/viaversion/util/TagUtil.java new file mode 100644 index 000000000..7b43ca2f7 --- /dev/null +++ b/common/src/main/java/com/viaversion/viaversion/util/TagUtil.java @@ -0,0 +1,58 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2024 ViaVersion and contributors + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +package com.viaversion.viaversion.util; + +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.Tag; +import java.util.Map; +import org.checkerframework.checker.nullness.qual.Nullable; + +public final class TagUtil { + + public static Tag handleDeep(final Tag tag, final TagUpdater consumer) { + return handleDeep(null, tag, consumer); + } + + private static Tag handleDeep(@Nullable final String key, final Tag tag, final TagUpdater consumer) { + if (tag instanceof CompoundTag) { + final CompoundTag compoundTag = (CompoundTag) tag; + for (final Map.Entry entry : compoundTag.entrySet()) { + final Tag updatedTag = handleDeep(entry.getKey(), entry.getValue(), consumer); + entry.setValue(updatedTag); + } + } else if (tag instanceof ListTag) { + final ListTag listTag = (ListTag) tag; + listTag.getValue().replaceAll(t -> handleDeep(null, t, consumer)); + } + return consumer.update(key, tag); + } + + @FunctionalInterface + public interface TagUpdater { + + /** + * Updates the given tag. + * + * @param key key of the tag if inside a CompoundTag + * @param tag the tag to update + * @return the updated tag, can be the original one + */ + Tag update(@Nullable String key, Tag tag); + } +} diff --git a/gradle.properties b/gradle.properties index fc02dcc2e..76ee51291 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,5 @@ # Project properties - we put these here so they can be modified without causing a recompile of the build scripts -projectVersion=4.9.3 +projectVersion=4.9.4-SNAPSHOT # Smile emoji mcVersions=1.20.4, 1.20.3, 1.20.2, 1.20.1, 1.20, 1.19.4, 1.19.3, 1.19.2, 1.19.1, 1.19, 1.18.2, 1.18.1, 1.18, 1.17.1, 1.17, 1.16.5, 1.16.4, 1.16.3, 1.16.2, 1.16.1, 1.16, 1.15.2, 1.15.1, 1.15, 1.14.4, 1.14.3, 1.14.2, 1.14.1, 1.14, 1.13.2, 1.13.1, 1.13, 1.12.2, 1.12.1, 1.12, 1.11.2, 1.11.1, 1.11, 1.10.2, 1.10.1, 1.10, 1.9.4, 1.9.3, 1.9.2, 1.9.1, 1.9, 1.8.9 From f868dfa12553f3f8b8a3a15ddb6f68da40caa8f3 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Thu, 7 Mar 2024 12:08:27 +0100 Subject: [PATCH 5/5] Update ViaNBT --- .../viaversion/api/data/MappingDataBase.java | 5 +- .../api/data/MappingDataLoader.java | 9 +- .../blockconnections/ConnectionData.java | 16 +-- .../packets/InventoryPackets.java | 106 +++++++----------- .../blockentities/BannerHandler.java | 13 +-- .../packets/InventoryPackets.java | 22 ++-- .../packets/PlayerPackets.java | 9 +- .../data/MappingData.java | 9 +- .../packets/EntityPackets.java | 2 +- .../packets/InventoryPackets.java | 25 ++--- .../Protocol1_17_1To1_17.java | 4 +- .../packets/EntityPackets.java | 6 +- .../Protocol1_18_2To1_18.java | 6 +- .../Protocol1_19_1To1_19.java | 15 ++- .../packets/EntityPackets.java | 6 +- .../data/MappingData.java | 9 +- .../packets/EntityPackets.java | 9 +- .../BlockItemPacketRewriter1_20_2.java | 4 +- .../BlockItemPacketRewriter1_20_3.java | 13 +-- .../packets/EntityPackets.java | 6 +- .../packets/InventoryPackets.java | 8 +- .../protocol1_9to1_8/ItemRewriter.java | 18 +-- .../rewriter/ComponentRewriter.java | 8 +- .../viaversion/rewriter/EntityRewriter.java | 11 +- .../viaversion/util/ComponentUtil.java | 2 +- .../viaversion/viaversion/util/TagUtil.java | 7 +- gradle/libs.versions.toml | 4 +- 27 files changed, 147 insertions(+), 205 deletions(-) diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java index 8b735272a..12dd7df32 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataBase.java @@ -25,6 +25,7 @@ package com.viaversion.viaversion.api.data; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntArrayTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.minecraft.RegistryType; @@ -83,8 +84,8 @@ public class MappingDataBase implements MappingData { entityMappings = loadFullMappings(data, unmappedIdentifierData, mappedIdentifierData, "entities"); argumentTypeMappings = loadFullMappings(data, unmappedIdentifierData, mappedIdentifierData, "argumenttypes"); - final ListTag unmappedParticles = unmappedIdentifierData.get("particles"); - final ListTag mappedParticles = mappedIdentifierData.get("particles"); + final ListTag unmappedParticles = unmappedIdentifierData.getListTag("particles", StringTag.class); + final ListTag mappedParticles = mappedIdentifierData.getListTag("particles", StringTag.class); if (unmappedParticles != null && mappedParticles != null) { Mappings particleMappings = loadMappings(data, "particles"); if (particleMappings == null) { diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataLoader.java b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataLoader.java index ecbc7a0c4..07d7f65de 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataLoader.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/MappingDataLoader.java @@ -27,6 +27,7 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntArrayTag; import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.io.NBTIO; import com.github.steveice10.opennbt.tag.io.TagReader; import com.google.common.annotations.Beta; @@ -227,8 +228,8 @@ public final class MappingDataLoader { } public static FullMappings loadFullMappings(final CompoundTag mappingsTag, final CompoundTag unmappedIdentifiers, final CompoundTag mappedIdentifiers, final String key) { - final ListTag unmappedElements = unmappedIdentifiers.get(key); - final ListTag mappedElements = mappedIdentifiers.get(key); + final ListTag unmappedElements = unmappedIdentifiers.getListTag(key, StringTag.class); + final ListTag mappedElements = mappedIdentifiers.getListTag(key, StringTag.class); if (unmappedElements == null || mappedElements == null) { return null; } @@ -239,8 +240,8 @@ public final class MappingDataLoader { } return new FullMappingsBase( - unmappedElements.getValue().stream().map(t -> (String) t.getValue()).collect(Collectors.toList()), - mappedElements.getValue().stream().map(t -> (String) t.getValue()).collect(Collectors.toList()), + unmappedElements.getValue().stream().map(StringTag::getValue).collect(Collectors.toList()), + mappedElements.getValue().stream().map(StringTag::getValue).collect(Collectors.toList()), mappings ); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java index ff2c7b3bb..ea4c80711 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/blockconnections/ConnectionData.java @@ -22,6 +22,7 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntArrayTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.NumberTag; +import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.connection.UserConnection; @@ -166,9 +167,9 @@ public final class ConnectionData { } Via.getPlatform().getLogger().info("Loading block connection mappings ..."); - ListTag blockStates = MappingDataLoader.loadNBT("blockstates-1.13.nbt").getListTag("blockstates"); + ListTag blockStates = MappingDataLoader.loadNBT("blockstates-1.13.nbt").getListTag("blockstates", StringTag.class); for (int id = 0; id < blockStates.size(); id++) { - String key = (String) blockStates.get(id).getValue(); + String key = blockStates.get(id).getValue(); KEY_TO_ID.put(key, id); } @@ -177,11 +178,10 @@ public final class ConnectionData { if (!Via.getConfig().isReduceBlockStorageMemory()) { blockConnectionData = new Int2ObjectOpenHashMap<>(2048); - ListTag blockConnectionMappings = MappingDataLoader.loadNBT("blockConnections.nbt").getListTag("data"); - for (Tag blockTag : blockConnectionMappings) { - CompoundTag blockCompoundTag = (CompoundTag) blockTag; + ListTag blockConnectionMappings = MappingDataLoader.loadNBT("blockConnections.nbt").getListTag("data", CompoundTag.class); + for (CompoundTag blockTag : blockConnectionMappings) { BlockData blockData = new BlockData(); - for (Entry entry : blockCompoundTag.entrySet()) { + for (Entry entry : blockTag.entrySet()) { String key = entry.getKey(); if (key.equals("id") || key.equals("ids")) { continue; @@ -198,11 +198,11 @@ public final class ConnectionData { blockData.put(connectionTypeId, attachingFaces); } - NumberTag idTag = blockCompoundTag.getNumberTag("id"); + NumberTag idTag = blockTag.getNumberTag("id"); if (idTag != null) { blockConnectionData.put(idTag.asInt(), blockData); } else { - IntArrayTag idsTag = blockCompoundTag.getIntArrayTag("ids"); + IntArrayTag idsTag = blockTag.getIntArrayTag("ids"); for (int id : idsTag.getValue()) { blockConnectionData.put(id, blockData); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java index d5cea8d8f..d2b6eea00 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/InventoryPackets.java @@ -295,21 +295,16 @@ public class InventoryPackets extends ItemRewriter patternsTag = blockEntityTag.getListTag("Patterns", CompoundTag.class); if (patternsTag != null) { - for (Tag pattern : patternsTag) { - if (!(pattern instanceof CompoundTag)) { - continue; - } - - CompoundTag patternTag = (CompoundTag) pattern; - NumberTag colorTag = patternTag.getNumberTag("Color"); + for (CompoundTag pattern : patternsTag) { + NumberTag colorTag = pattern.getNumberTag("Color"); if (colorTag == null) { continue; } // Invert color id - patternTag.putInt("Color", 15 - colorTag.asInt()); + pattern.putInt("Color", 15 - colorTag.asInt()); } } } @@ -324,16 +319,11 @@ public class InventoryPackets extends ItemRewriter ench = tag.getListTag("ench", CompoundTag.class); if (ench != null) { - ListTag enchantments = new ListTag(CompoundTag.class); - for (Tag enchEntry : ench) { - if (!(enchEntry instanceof CompoundTag)) { - continue; - } - - CompoundTag entryTag = (CompoundTag) enchEntry; - NumberTag idTag = entryTag.getNumberTag("id"); + ListTag enchantments = new ListTag<>(CompoundTag.class); + for (CompoundTag enchEntry : ench) { + NumberTag idTag = enchEntry.getNumberTag("id"); if (idTag == null) { continue; } @@ -346,7 +336,7 @@ public class InventoryPackets extends ItemRewriter storedEnch = tag.getListTag("StoredEnchantments", CompoundTag.class); if (storedEnch != null) { - ListTag newStoredEnch = new ListTag(CompoundTag.class); - for (Tag enchEntry : storedEnch) { - if (!(enchEntry instanceof CompoundTag)) { - continue; - } - - CompoundTag entryTag = (CompoundTag) enchEntry; - NumberTag idTag = entryTag.getNumberTag("id"); + ListTag newStoredEnch = new ListTag<>(CompoundTag.class); + for (CompoundTag enchEntry : storedEnch) { + NumberTag idTag = enchEntry.getNumberTag("id"); if (idTag == null) { continue; } @@ -379,7 +364,7 @@ public class InventoryPackets extends ItemRewriter canPlaceOnTag = tag.getListTag("CanPlaceOn"); if (canPlaceOnTag != null) { - ListTag newCanPlaceOn = new ListTag(StringTag.class); + ListTag newCanPlaceOn = new ListTag<>(StringTag.class); tag.put(NBT_TAG_NAME + "|CanPlaceOn", canPlaceOnTag.copy()); for (Tag oldTag : canPlaceOnTag) { Object value = oldTag.getValue(); @@ -412,9 +397,9 @@ public class InventoryPackets extends ItemRewriter canDestroyTag = tag.getListTag("CanDestroy"); if (canDestroyTag != null) { - ListTag newCanDestroy = new ListTag(StringTag.class); + ListTag newCanDestroy = new ListTag<>(StringTag.class); tag.put(NBT_TAG_NAME + "|CanDestroy", canDestroyTag.copy()); for (Tag oldTag : canDestroyTag) { Object value = oldTag.getValue(); @@ -594,16 +579,11 @@ public class InventoryPackets extends ItemRewriter patternsTag = blockEntityTag.getListTag("Patterns", CompoundTag.class); if (patternsTag != null) { - for (Tag pattern : patternsTag) { - if (!(pattern instanceof CompoundTag)) { - continue; - } - - CompoundTag patternTag = (CompoundTag) pattern; - NumberTag colorTag = patternTag.getNumberTag("Color"); - patternTag.putInt("Color", 15 - colorTag.asInt()); // Invert color id + for (CompoundTag pattern : patternsTag) { + NumberTag colorTag = pattern.getNumberTag("Color"); + pattern.putInt("Color", 15 - colorTag.asInt()); // Invert color id } } } @@ -619,16 +599,11 @@ public class InventoryPackets extends ItemRewriter enchantments = tag.getListTag("Enchantments", CompoundTag.class); if (enchantments != null) { - ListTag ench = new ListTag(CompoundTag.class); - for (Tag enchantmentEntry : enchantments) { - if (!(enchantmentEntry instanceof CompoundTag)) { - continue; - } - - CompoundTag entryTag = (CompoundTag) enchantmentEntry; - StringTag idTag = entryTag.getStringTag("id"); + ListTag ench = new ListTag<>(CompoundTag.class); + for (CompoundTag enchantmentEntry : enchantments) { + StringTag idTag = enchantmentEntry.getStringTag("id"); if (idTag == null) { continue; } @@ -641,7 +616,7 @@ public class InventoryPackets extends ItemRewriter storedEnch = tag.getListTag("StoredEnchantments", CompoundTag.class); if (storedEnch != null) { - ListTag newStoredEnch = new ListTag(CompoundTag.class); - for (Tag enchantmentEntry : storedEnch) { - if (!(enchantmentEntry instanceof CompoundTag)) { - continue; - } - - CompoundTag entryTag = (CompoundTag) enchantmentEntry; - StringTag idTag = entryTag.getStringTag("id"); + ListTag newStoredEnch = new ListTag<>(CompoundTag.class); + for (CompoundTag enchantmentEntry : storedEnch) { + StringTag idTag = enchantmentEntry.getStringTag("id"); if (idTag == null) { continue; } @@ -679,7 +649,7 @@ public class InventoryPackets extends ItemRewriter old = tag.getListTag("CanPlaceOn"); + ListTag newCanPlaceOn = new ListTag<>(StringTag.class); for (Tag oldTag : old) { Object value = oldTag.getValue(); String[] newValues = BlockIdData.fallbackReverseMapping.get(value instanceof String @@ -702,7 +672,7 @@ public class InventoryPackets extends ItemRewriter old = tag.getListTag("CanDestroy"); + ListTag newCanDestroy = new ListTag<>(StringTag.class); for (Tag oldTag : old) { Object value = oldTag.getValue(); String[] newValues = BlockIdData.fallbackReverseMapping.get(value instanceof String @@ -722,7 +692,7 @@ public class InventoryPackets extends ItemRewriter patterns = tag.getListTag("Patterns", CompoundTag.class); if (patterns != null) { - for (Tag pattern : patterns) { - if (!(pattern instanceof CompoundTag)) { - continue; - } - - CompoundTag patternTag = (CompoundTag) pattern; - NumberTag colorTag = patternTag.getNumberTag("Color"); + for (CompoundTag pattern : patterns) { + NumberTag colorTag = pattern.getNumberTag("Color"); if (colorTag != null) { - patternTag.putInt("Color", 15 - colorTag.asInt()); // Invert color id + pattern.putInt("Color", 15 - colorTag.asInt()); // Invert color id } } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/InventoryPackets.java index 16f16cc32..ecb706e63 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/InventoryPackets.java @@ -244,14 +244,12 @@ public class InventoryPackets extends ItemRewriter lore = display.getListTag("Lore", StringTag.class); if (lore != null) { - display.put(NBT_TAG_NAME + "|Lore", new ListTag(lore.copy().getValue())); // Save old lore - for (Tag loreEntry : lore) { - if (loreEntry instanceof StringTag) { - String jsonText = ComponentUtil.legacyToJsonString(((StringTag) loreEntry).getValue(), true); - ((StringTag) loreEntry).setValue(jsonText); - } + display.put(NBT_TAG_NAME + "|Lore", new ListTag<>(lore.copy().getValue())); // Save old lore + for (StringTag loreEntry : lore) { + String jsonText = ComponentUtil.legacyToJsonString(loreEntry.getValue(), true); + loreEntry.setValue(jsonText); } } } @@ -268,16 +266,14 @@ public class InventoryPackets extends ItemRewriter lore = display.getListTag("Lore", StringTag.class); if (lore != null) { Tag savedLore = display.remove(NBT_TAG_NAME + "|Lore"); if (savedLore instanceof ListTag) { - display.put("Lore", new ListTag(((ListTag) savedLore).getValue())); + display.put("Lore", new ListTag<>(((ListTag) savedLore).getValue())); } else { - for (Tag loreEntry : lore) { - if (loreEntry instanceof StringTag) { - ((StringTag) loreEntry).setValue(ComponentUtil.jsonToLegacy(((StringTag) loreEntry).getValue())); - } + for (StringTag loreEntry : lore) { + loreEntry.setValue(ComponentUtil.jsonToLegacy(loreEntry.getValue())); } } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java index c87d2518a..522a101be 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/packets/PlayerPackets.java @@ -57,15 +57,18 @@ public class PlayerPackets { CompoundTag tag = item.tag(); if (tag == null) return; - ListTag pages = tag.getListTag("pages"); + ListTag pages = tag.getListTag("pages", StringTag.class); // Fix for https://github.com/ViaVersion/ViaVersion/issues/2660 if (pages == null) { - tag.put("pages", new ListTag(Collections.singletonList(new StringTag()))); + pages = new ListTag<>(StringTag.class); + pages.add(new StringTag()); + tag.put("pages", pages); + return; } // Client limit when editing a book was upped from 50 to 100 in 1.14, but some anti-exploit plugins ban with a size higher than the old client limit - if (Via.getConfig().isTruncate1_14Books() && pages != null) { + if (Via.getConfig().isTruncate1_14Books()) { if (pages.size() > 50) { pages.setValue(pages.getValue().subList(0, 50)); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/data/MappingData.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/data/MappingData.java index 2fc15e2ef..882c7178b 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/data/MappingData.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/data/MappingData.java @@ -38,12 +38,11 @@ public class MappingData extends MappingDataBase { dimensionRegistry = MappingDataLoader.loadNBTFromFile("dimension-registry-1.16.2.nbt"); // Data of each dimension - final ListTag dimensions = dimensionRegistry.getCompoundTag("minecraft:dimension_type").get("value"); - for (final Tag dimension : dimensions) { - final CompoundTag dimensionCompound = (CompoundTag) dimension; + final ListTag dimensions = dimensionRegistry.getCompoundTag("minecraft:dimension_type").getListTag("value", CompoundTag.class); + for (final CompoundTag dimension : dimensions) { // Copy with an empty name - final CompoundTag dimensionData = dimensionCompound.getCompoundTag("element").copy(); - dimensionDataMap.put(dimensionCompound.getStringTag("name").getValue(), dimensionData); + final CompoundTag dimensionData = dimension.getCompoundTag("element").copy(); + dimensionDataMap.put(dimension.getStringTag("name").getValue(), dimensionData); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/EntityPackets.java index 9b7b40316..5e0233c01 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/EntityPackets.java @@ -79,7 +79,7 @@ public class EntityPackets { private static final String[] WORLD_NAMES = {"minecraft:overworld", "minecraft:the_nether", "minecraft:the_end"}; static { - ListTag list = new ListTag(CompoundTag.class); + ListTag list = new ListTag<>(CompoundTag.class); list.add(createOverworldEntry()); list.add(createOverworldCavesEntry()); list.add(createNetherEntry()); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/InventoryPackets.java index b5781ddd4..126241dba 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/packets/InventoryPackets.java @@ -155,15 +155,10 @@ public class InventoryPackets extends ItemRewriter pages = tag.getListTag("pages", StringTag.class); if (pages != null) { - for (Tag pageTag : pages) { - if (!(pageTag instanceof StringTag)) { - continue; - } - - StringTag page = (StringTag) pageTag; - page.setValue(protocol.getComponentRewriter().processText(page.getValue()).toString()); + for (StringTag pageTag : pages) { + pageTag.setValue(protocol.getComponentRewriter().processText(pageTag.getValue()).toString()); } } } @@ -198,13 +193,10 @@ public class InventoryPackets extends ItemRewriter attributes = item.tag().getListTag("AttributeModifiers", CompoundTag.class); if (attributes == null) return; - for (Tag tag : attributes) { - if (!(tag instanceof CompoundTag)) continue; - - CompoundTag attribute = (CompoundTag) tag; + for (CompoundTag attribute : attributes) { rewriteAttributeName(attribute, "AttributeName", false); rewriteAttributeName(attribute, "Name", false); NumberTag leastTag = attribute.getNumberTag("UUIDLeast"); @@ -219,13 +211,10 @@ public class InventoryPackets extends ItemRewriter attributes = item.tag().getListTag("AttributeModifiers", CompoundTag.class); if (attributes == null) return; - for (Tag tag : attributes) { - if (!(tag instanceof CompoundTag)) continue; - - CompoundTag attribute = (CompoundTag) tag; + for (CompoundTag attribute : attributes) { rewriteAttributeName(attribute, "AttributeName", true); rewriteAttributeName(attribute, "Name", true); IntArrayTag uuidTag = attribute.getIntArrayTag("UUID"); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17_1to1_17/Protocol1_17_1To1_17.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17_1to1_17/Protocol1_17_1To1_17.java index ab7cef3cf..27f8b69f2 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17_1to1_17/Protocol1_17_1To1_17.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17_1to1_17/Protocol1_17_1To1_17.java @@ -88,14 +88,14 @@ public final class Protocol1_17_1To1_17 extends AbstractProtocol pagesTag = new ListTag<>(StringTag.class); for (int i = 0; i < pages; i++) { String page = wrapper.read(PAGE_STRING_TYPE); pagesTag.add(new StringTag(page)); } // Legacy servers don't like an empty pages list - if (pagesTag.size() == 0) { + if (pagesTag.isEmpty()) { pagesTag.add(new StringTag("")); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java index 4404fdaa7..1a0216af5 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/packets/EntityPackets.java @@ -78,9 +78,9 @@ public final class EntityPackets extends EntityRewriter { // Add new dimension fields CompoundTag dimensionRegistry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0).get("minecraft:dimension_type"); - ListTag dimensions = dimensionRegistry.get("value"); - for (Tag dimension : dimensions) { - CompoundTag dimensionCompound = ((CompoundTag) dimension).get("element"); + ListTag dimensions = dimensionRegistry.getListTag("value", CompoundTag.class); + for (CompoundTag dimension : dimensions) { + CompoundTag dimensionCompound = dimension.get("element"); addNewDimensionData(dimensionCompound); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18_2to1_18/Protocol1_18_2To1_18.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18_2to1_18/Protocol1_18_2To1_18.java index 3ad1aa9ca..9533b38e5 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18_2to1_18/Protocol1_18_2To1_18.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18_2to1_18/Protocol1_18_2To1_18.java @@ -70,9 +70,9 @@ public final class Protocol1_18_2To1_18 extends AbstractProtocol { final CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); final CompoundTag dimensionsHolder = registry.get("minecraft:dimension_type"); - final ListTag dimensions = dimensionsHolder.get("value"); - for (final Tag dimension : dimensions) { - addTagPrefix(((CompoundTag) dimension).get("element")); + final ListTag dimensions = dimensionsHolder.getListTag("value", CompoundTag.class); + for (final CompoundTag dimension : dimensions) { + addTagPrefix(dimension.get("element")); } addTagPrefix(wrapper.get(Type.NAMED_COMPOUND_TAG, 1)); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_1to1_19/Protocol1_19_1To1_19.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_1to1_19/Protocol1_19_1To1_19.java index 2156cd61e..c0e0f8fba 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_1to1_19/Protocol1_19_1To1_19.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_1to1_19/Protocol1_19_1To1_19.java @@ -222,11 +222,10 @@ public final class Protocol1_19_1To1_19 extends AbstractProtocol chatTypes = registry.getCompoundTag("minecraft:chat_type").getListTag("value", CompoundTag.class); + for (final CompoundTag chatType : chatTypes) { + final NumberTag idTag = chatType.get("id"); + chatTypeStorage.addChatType(idTag.asInt(), chatType); } // Replace chat types - they won't actually be used @@ -405,12 +404,12 @@ public final class Protocol1_19_1To1_19 extends AbstractProtocol parameters = tag.getListTag("parameters", StringTag.class); final List arguments = new ArrayList<>(); if (parameters != null) { - for (final Tag element : parameters) { + for (final StringTag element : parameters) { JsonElement argument = null; - switch ((String) element.getValue()) { + switch (element.getValue()) { case "sender": argument = senderName; break; diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/packets/EntityPackets.java index aaebf5a40..5b8872d58 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/packets/EntityPackets.java @@ -64,9 +64,9 @@ public final class EntityPackets extends EntityRewriter biomes = biomeRegistry.getListTag("value", CompoundTag.class); + for (final CompoundTag biomeTag : biomes) { + final CompoundTag biomeData = biomeTag.get("element"); final StringTag precipitation = biomeData.get("precipitation"); final byte precipitationByte = precipitation.getValue().equals("none") ? (byte) 0 : 1; biomeData.put("has_precipitation", new ByteTag(precipitationByte)); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/data/MappingData.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/data/MappingData.java index 5a3b3dfb8..975ba3c97 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/data/MappingData.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/data/MappingData.java @@ -37,11 +37,10 @@ public final class MappingData extends MappingDataBase { @Override protected void loadExtras(final CompoundTag daata) { - final ListTag chatTypes = MappingDataLoader.loadNBTFromFile("chat-types-1.19.nbt").get("values"); - for (final Tag chatType : chatTypes) { - final CompoundTag chatTypeCompound = (CompoundTag) chatType; - final NumberTag idTag = chatTypeCompound.get("id"); - defaultChatTypes.put(idTag.asInt(), chatTypeCompound); + final ListTag chatTypes = MappingDataLoader.loadNBTFromFile("chat-types-1.19.nbt").getListTag("values", CompoundTag.class); + for (final CompoundTag chatType : chatTypes) { + final NumberTag idTag = chatType.get("id"); + defaultChatTypes.put(idTag.asInt(), chatType); } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/packets/EntityPackets.java index 939f3dcf8..965ae3127 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/packets/EntityPackets.java @@ -209,13 +209,12 @@ public final class EntityPackets extends EntityRewriter dimensions = tag.getCompoundTag("minecraft:dimension_type").getListTag("value", CompoundTag.class); final Map dimensionDataMap = new HashMap<>(dimensions.size()); final Map dimensionsMap = new HashMap<>(dimensions.size()); - for (final Tag dimension : dimensions) { - final CompoundTag dimensionCompound = (CompoundTag) dimension; - final CompoundTag element = dimensionCompound.get("element"); - final String name = (String) dimensionCompound.get("name").getValue(); + for (final CompoundTag dimension : dimensions) { + final CompoundTag element = dimension.get("element"); + final String name = dimension.getStringTag("name").getValue(); addMonsterSpawnData(element); dimensionDataMap.put(name, new DimensionDataImpl(element)); dimensionsMap.put(element.copy(), name); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java index b1285eedb..a60e652e3 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/rewriter/BlockItemPacketRewriter1_20_2.java @@ -372,7 +372,7 @@ public final class BlockItemPacketRewriter1_20_2 extends ItemRewriter effectsTag = (ListTag) customPotionEffectsTag; item.tag().put("custom_potion_effects", customPotionEffectsTag); for (final Tag tag : effectsTag) { @@ -403,7 +403,7 @@ public final class BlockItemPacketRewriter1_20_2 extends ItemRewriter effectsTag = (ListTag) customPotionEffectsTag; item.tag().put("CustomPotionEffects", effectsTag); for (final Tag tag : effectsTag) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/rewriter/BlockItemPacketRewriter1_20_3.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/rewriter/BlockItemPacketRewriter1_20_3.java index 0fd64b70b..e8511072e 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/rewriter/BlockItemPacketRewriter1_20_3.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/rewriter/BlockItemPacketRewriter1_20_3.java @@ -150,20 +150,15 @@ public final class BlockItemPacketRewriter1_20_3 extends ItemRewriter pages = tag.getListTag(key, StringTag.class); if (pages == null) { return; } - for (final Tag pageTag : pages) { - if (!(pageTag instanceof StringTag)) { - continue; - } - - final StringTag stringTag = (StringTag) pageTag; + for (final StringTag pageTag : pages) { try { - final JsonElement updatedComponent = ComponentUtil.convertJson(stringTag.getValue(), ComponentUtil.SerializerVersion.V1_19_4, ComponentUtil.SerializerVersion.V1_20_3); - stringTag.setValue(updatedComponent.toString()); + final JsonElement updatedComponent = ComponentUtil.convertJson(pageTag.getValue(), ComponentUtil.SerializerVersion.V1_19_4, ComponentUtil.SerializerVersion.V1_20_3); + pageTag.setValue(updatedComponent.toString()); } catch (final Exception e) { Via.getManager().debugHandler().error("Error during book conversion", e); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java index 8f242781e..4669b0e4c 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/EntityPackets.java @@ -77,10 +77,10 @@ public final class EntityPackets extends EntityRewriter { final CompoundTag registry = wrapper.get(Type.NAMED_COMPOUND_TAG, 0); final CompoundTag damageTypeRegistry = registry.get("minecraft:damage_type"); - final ListTag damageTypes = damageTypeRegistry.get("value"); + final ListTag damageTypes = damageTypeRegistry.get("value"); int highestId = -1; - for (final Tag damageType : damageTypes) { - final IntTag id = ((CompoundTag) damageType).get("id"); + for (final CompoundTag damageType : damageTypes) { + final IntTag id = damageType.get("id"); highestId = Math.max(highestId, id.asInt()); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/InventoryPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/InventoryPackets.java index 2a87050cc..1ad77ab7c 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/InventoryPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/packets/InventoryPackets.java @@ -170,16 +170,16 @@ public final class InventoryPackets extends ItemRewriter messages = new ListTag<>(StringTag.class); for (int i = 1; i < 5; i++) { - final Tag text = tag.remove("Text" + i); + final StringTag text = tag.remove("Text" + i); messages.add(text != null ? text : new StringTag(ComponentUtil.emptyJsonComponentString())); } frontText.put("messages", messages); - final ListTag filteredMessages = new ListTag(StringTag.class); + final ListTag filteredMessages = new ListTag<>(StringTag.class); for (int i = 1; i < 5; i++) { - final Tag text = tag.remove("FilteredText" + i); + final StringTag text = tag.remove("FilteredText" + i); filteredMessages.add(text != null ? text : messages.get(i - 1)); } if (!filteredMessages.equals(messages)) { diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/ItemRewriter.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/ItemRewriter.java index 82356b9b1..9da9c1edd 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/ItemRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_9to1_8/ItemRewriter.java @@ -221,24 +221,20 @@ public class ItemRewriter { } CompoundTag tag = item.tag(); - ListTag pages = tag.getListTag("pages"); + ListTag pages = tag.getListTag("pages", StringTag.class); if (pages == null) { return; } for (int i = 0; i < pages.size(); i++) { - Tag pageTag = pages.get(i); - if (!(pageTag instanceof StringTag)) { - continue; - } - StringTag stag = (StringTag) pageTag; - String value = stag.getValue(); + StringTag pageTag = pages.get(i); + String value = pageTag.getValue(); if (value.replaceAll(" ", "").isEmpty()) { value = "\"" + fixBookSpaceChars(value) + "\""; } else { value = fixBookSpaceChars(value); } - stag.setValue(value); + pageTag.setValue(value); } } @@ -289,17 +285,15 @@ public class ItemRewriter { tag = new CompoundTag(); } - ListTag pages = tag.getListTag("pages"); + ListTag pages = tag.getListTag("pages", StringTag.class); if (pages == null) { - pages = new ListTag(Collections.singletonList(new StringTag(Protocol1_9To1_8.fixJson("").toString()))); + pages = new ListTag<>(Collections.singletonList(new StringTag(Protocol1_9To1_8.fixJson("").toString()))); tag.put("pages", pages); item.setTag(tag); return; } for (int i = 0; i < pages.size(); i++) { - if (!(pages.get(i) instanceof StringTag)) - continue; StringTag page = pages.get(i); page.setValue(Protocol1_9To1_8.fixJson(page.getValue()).toString()); } diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/ComponentRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/ComponentRewriter.java index 808f225e9..125dcc3e4 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/ComponentRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/ComponentRewriter.java @@ -254,13 +254,13 @@ public class ComponentRewriter { } if (tag instanceof ListTag) { - processListTag((ListTag) tag); + processListTag((ListTag) tag); } else if (tag instanceof CompoundTag) { processCompoundTag((CompoundTag) tag); } } - private void processListTag(final ListTag tag) { + private void processListTag(final ListTag tag) { for (final Tag entry : tag) { processTag(entry); } @@ -271,13 +271,13 @@ public class ComponentRewriter { if (translate != null) { handleTranslate(tag, translate); - final ListTag with = tag.getListTag("with"); + final ListTag with = tag.getListTag("with"); if (with != null) { processListTag(with); } } - final ListTag extra = tag.getListTag("extra"); + final ListTag extra = tag.getListTag("extra"); if (extra != null) { processListTag(extra); } diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java index 2c7cd3fed..b2ad09255 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java @@ -449,7 +449,7 @@ public abstract class EntityRewriter biomes = biomeRegistry.get("value"); tracker(connection).setBiomesSent(biomes.size()); } @@ -465,12 +465,11 @@ public abstract class EntityRewriter dimensions = registry.getCompoundTag("minecraft:dimension_type").getListTag("value", CompoundTag.class); final Map dimensionDataMap = new HashMap<>(dimensions.size()); - for (final Tag dimension : dimensions) { - final CompoundTag dimensionCompound = (CompoundTag) dimension; - final CompoundTag element = dimensionCompound.get("element"); - final String name = dimensionCompound.getStringTag("name").getValue(); + for (final CompoundTag dimension : dimensions) { + final CompoundTag element = dimension.get("element"); + final String name = dimension.getStringTag("name").getValue(); dimensionDataMap.put(name, new DimensionDataImpl(element)); } tracker(connection).setDimensions(dimensionDataMap); diff --git a/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java b/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java index 47ceac110..cc5292e46 100644 --- a/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java +++ b/common/src/main/java/com/viaversion/viaversion/util/ComponentUtil.java @@ -78,7 +78,7 @@ public final class ComponentUtil { private static Tag trimStrings(final Tag input) { // Dirty fix for https://github.com/ViaVersion/ViaVersion/issues/3650 - // Usually tripped by hover event data being too long, e.g. book or shulker box contents + // Usually tripped by hover event data being too long, e.g. book or shulker box contents, which have to be held in full as SNBT if (input == null) { return null; } diff --git a/common/src/main/java/com/viaversion/viaversion/util/TagUtil.java b/common/src/main/java/com/viaversion/viaversion/util/TagUtil.java index 7b43ca2f7..28be0a62a 100644 --- a/common/src/main/java/com/viaversion/viaversion/util/TagUtil.java +++ b/common/src/main/java/com/viaversion/viaversion/util/TagUtil.java @@ -37,12 +37,15 @@ public final class TagUtil { entry.setValue(updatedTag); } } else if (tag instanceof ListTag) { - final ListTag listTag = (ListTag) tag; - listTag.getValue().replaceAll(t -> handleDeep(null, t, consumer)); + handleListTag((ListTag) tag, consumer); } return consumer.update(key, tag); } + private static void handleListTag(final ListTag listTag, final TagUpdater consumer) { + listTag.getValue().replaceAll(t -> (T) handleDeep(null, t, consumer)); + } + @FunctionalInterface public interface TagUpdater { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d9eb3ce36..eda53b3ee 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,8 +5,8 @@ metadata.format.version = "1.1" gson = "2.10.1" fastutil = "8.5.12" flare = "2.0.1" -vianbt = "4.2.0" -mcstructs = "2.4.2-SNAPSHOT" +vianbt = "4.4.0" +mcstructs = "2.4.2" # Common provided netty = "4.0.20.Final"