diff --git a/api/src/main/java/com/viaversion/viaversion/api/protocol/AbstractProtocol.java b/api/src/main/java/com/viaversion/viaversion/api/protocol/AbstractProtocol.java index 1a8e313d9..a7cd7da21 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/protocol/AbstractProtocol.java +++ b/api/src/main/java/com/viaversion/viaversion/api/protocol/AbstractProtocol.java @@ -38,6 +38,7 @@ import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypeMap; import com.viaversion.viaversion.api.protocol.packet.provider.PacketTypesProvider; import com.viaversion.viaversion.api.protocol.packet.provider.SimplePacketTypesProvider; import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; +import com.viaversion.viaversion.api.rewriter.MappingDataListener; import com.viaversion.viaversion.api.rewriter.Rewriter; import com.viaversion.viaversion.exception.CancelException; import com.viaversion.viaversion.exception.InformativeException; @@ -211,6 +212,7 @@ public abstract class AbstractProtocol rewriter) { @@ -219,7 +221,7 @@ public abstract class AbstractProtocol rewriter) { + private void callOnMappingDataLoaded(@Nullable MappingDataListener rewriter) { if (rewriter != null) { rewriter.onMappingDataLoaded(); } diff --git a/api/src/main/java/com/viaversion/viaversion/api/protocol/Protocol.java b/api/src/main/java/com/viaversion/viaversion/api/protocol/Protocol.java index 58bc62ee0..a18ed43bd 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/protocol/Protocol.java +++ b/api/src/main/java/com/viaversion/viaversion/api/protocol/Protocol.java @@ -36,6 +36,8 @@ import com.viaversion.viaversion.api.protocol.remapper.PacketHandler; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; import com.viaversion.viaversion.api.rewriter.EntityRewriter; import com.viaversion.viaversion.api.rewriter.ItemRewriter; +import com.viaversion.viaversion.api.rewriter.Rewriter; +import com.viaversion.viaversion.api.rewriter.TagRewriter; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -350,6 +352,15 @@ public interface Protocol { +public interface Rewriter extends MappingDataListener { /** * Registers any packet handlers or rewrites needed. @@ -37,7 +37,4 @@ public interface Rewriter { * @return protocol of the rewriter */ T protocol(); - - default void onMappingDataLoaded() { - } } diff --git a/api/src/main/java/com/viaversion/viaversion/api/rewriter/TagRewriter.java b/api/src/main/java/com/viaversion/viaversion/api/rewriter/TagRewriter.java new file mode 100644 index 000000000..9ea232f69 --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/rewriter/TagRewriter.java @@ -0,0 +1,77 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2024 ViaVersion and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ +package com.viaversion.viaversion.api.rewriter; + +import com.viaversion.viaversion.api.minecraft.RegistryType; +import com.viaversion.viaversion.api.minecraft.TagData; +import com.viaversion.viaversion.api.minecraft.entities.EntityType; +import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; + +public interface TagRewriter extends MappingDataListener { + + void removeTags(String registryKey); + + void renameTag(RegistryType type, String registryKey, String renameTo); + + /** + * Adds an empty tag (since the client crashes if a checked tag is not registered). + * + * @param tagType registry tag type + * @param tagId tag id + */ + void addEmptyTag(RegistryType tagType, String tagId); + + void addEmptyTags(RegistryType tagType, String... tagIds); + + /** + * Adds an entity tag type to be filled with the given entity type ids. + * + * @param tagId registry tag type + * @param entities mapped entity types + */ + void addEntityTag(String tagId, EntityType... entities); + + /** + * Adds a tag type to be filled with the given type ids after being mapped to new ids. + * + * @param tagType registry tag type + * @param tagId tag id + * @param unmappedIds unmapped type ids + */ + void addTag(RegistryType tagType, String tagId, int... unmappedIds); + + /** + * Adds a tag type to be filled with the given raw type ids. + * + * @param tagType registry tag type + * @param tagId tag id + * @param ids raw type ids + */ + void addTagRaw(RegistryType tagType, String tagId, int... ids); + + @Nullable + List getNewTags(RegistryType tagType); + + List getOrComputeNewTags(RegistryType tagType); +} diff --git a/api/src/main/java/com/viaversion/viaversion/util/IdAndData.java b/api/src/main/java/com/viaversion/viaversion/util/IdAndData.java new file mode 100644 index 000000000..3274c73c6 --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/util/IdAndData.java @@ -0,0 +1,113 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2024 ViaVersion and contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package com.viaversion.viaversion.util; + +import com.google.common.base.Preconditions; +import java.util.Objects; + +public class IdAndData { + + private int id; + private byte data; + + public IdAndData(final int id) { + this.id = id; + this.data = -1; + } + + public IdAndData(final int id, final int data) { + Preconditions.checkArgument(data >= 0 && data <= 15, "Data has to be between 0 and 15: (id: " + id + " data: " + data + ")"); + this.id = id; + this.data = (byte) data; + } + + public static int getId(final int rawData) { + return rawData >> 4; + } + + public static int getData(final int rawData) { + return rawData & 15; + } + + public static int toRawData(final int id) { + return id << 4; + } + + public static int removeData(final int data) { + return data & ~15; + } + + public static IdAndData fromRawData(final int rawData) { + return new IdAndData(rawData >> 4, rawData & 15); + } + + public static int toRawData(final int id, final int data) { + return (id << 4) | (data & 15); + } + + public int toRawData() { + return toRawData(id, data); + } + + public IdAndData withData(final int data) { + return new IdAndData(this.id, data); + } + + public int getId() { + return id; + } + + public void setId(final int id) { + this.id = id; + } + + public byte getData() { + return data; + } + + public void setData(final int data) { + this.data = (byte) data; + } + + @Override + public boolean equals(final Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + IdAndData idAndData = (IdAndData) o; + return id == idAndData.id && data == idAndData.data; + } + + @Override + public int hashCode() { + return Objects.hash(id, data); + } + + @Override + public String toString() { + return "IdAndData{" + + "id=" + id + + ", data=" + data + + '}'; + } +} diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/Protocol1_12To1_11_1.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/Protocol1_12To1_11_1.java index 0780be88c..b7b0ab2f1 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/Protocol1_12To1_11_1.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_12to1_11_1/Protocol1_12To1_11_1.java @@ -100,11 +100,11 @@ public class Protocol1_12To1_11_1 extends AbstractProtocol { if (!Via.getConfig().is1_12NBTArrayFix()) return; try { - JsonElement obj = Protocol1_9To1_8.FIX_JSON.transform(null, wrapper.passthrough(Type.COMPONENT).toString()); - TranslateRewriter.toClient(obj); - ChatItemRewriter.toClient(obj); + final JsonElement element = wrapper.passthrough(Type.COMPONENT); + TranslateRewriter.toClient(element); + ChatItemRewriter.toClient(element); - wrapper.set(Type.COMPONENT, 0, obj); + wrapper.set(Type.COMPONENT, 0, element); } catch (Exception e) { Via.getPlatform().getLogger().log(Level.WARNING, "Error converting 1.11.2 -> 1.12 chat item", e); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/Protocol1_13_1To1_13.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/Protocol1_13_1To1_13.java index 85f0e8920..a8aa61b8d 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/Protocol1_13_1To1_13.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/Protocol1_13_1To1_13.java @@ -44,6 +44,7 @@ public class Protocol1_13_1To1_13 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_13_1To1_13() { super(ClientboundPackets1_13.class, ClientboundPackets1_13.class, ServerboundPackets1_13.class, ServerboundPackets1_13.class); @@ -128,7 +129,7 @@ public class Protocol1_13_1To1_13 extends AbstractProtocol(this).register(ClientboundPackets1_13.TAGS, RegistryType.ITEM); + tagRewriter.register(ClientboundPackets1_13.TAGS, RegistryType.ITEM); new StatisticsRewriter<>(this).register(ClientboundPackets1_13.STATISTICS); } @@ -154,4 +155,9 @@ public class Protocol1_13_1To1_13 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/metadata/MetadataRewriter1_13_1To1_13.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/metadata/MetadataRewriter1_13_1To1_13.java index 9c256c2ef..c6bf1b079 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/metadata/MetadataRewriter1_13_1To1_13.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13_1to1_13/metadata/MetadataRewriter1_13_1To1_13.java @@ -32,7 +32,7 @@ public class MetadataRewriter1_13_1To1_13 extends EntityRewriter { int data = meta.value(); meta.setValue(protocol.getMappingData().getNewBlockStateId(data)); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java index 9e0ff1f5e..554628e08 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/Protocol1_13To1_12_2.java @@ -65,6 +65,7 @@ import com.viaversion.viaversion.rewriter.SoundRewriter; import com.viaversion.viaversion.util.ChatColorUtil; import com.viaversion.viaversion.util.ComponentUtil; import com.viaversion.viaversion.util.GsonUtil; +import com.viaversion.viaversion.util.IdAndData; import java.util.ArrayList; import java.util.HashMap; import java.util.List; @@ -317,7 +318,7 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol> 12; - wrapper.set(Type.INT, 1, WorldPackets.toNewId(blockId << 4 | blockData)); + wrapper.set(Type.INT, 1, WorldPackets.toNewId(IdAndData.toRawData(blockId, blockData))); } }); } @@ -839,6 +840,7 @@ public class Protocol1_13To1_12_2 extends AbstractProtocol Types1_13.META_TYPES.byId(typeId > 4 ? typeId + 1 : typeId)); filter().metaType(Types1_13.META_TYPES.itemType).handler(((event, meta) -> protocol.getItemRewriter().handleItemToClient(meta.value()))); - filter().metaType(Types1_13.META_TYPES.blockStateType).handler(((event, meta) -> meta.setValue(WorldPackets.toNewId(meta.value())))); + filter().metaType(Types1_13.META_TYPES.blockStateType).handler(((event, meta) -> { + final int oldId = meta.value(); + if (oldId != 0) { + final int combined = (((oldId & 4095) << 4) | (oldId >> 12 & 15)); + final int newId = WorldPackets.toNewId(combined); + meta.setValue(newId); + } + })); // Previously unused, now swimming filter().index(0).handler((event, meta) -> meta.setValue((byte) ((byte) meta.getValue() & ~0x10))); @@ -53,14 +60,6 @@ public class MetadataRewriter1_13To1_12_2 extends EntityRewriter { - // Remap held block to match new format for remapping to flat block - int stateId = meta.value(); - int id = stateId & 4095; - int data = stateId >> 12 & 15; - meta.setValue((id << 4) | (data & 0xF)); - }); - filter().type(EntityTypes1_13.EntityType.WOLF).index(17).handler((event, meta) -> { // Handle new colors meta.setValue(15 - (int) meta.getValue()); @@ -69,9 +68,9 @@ public class MetadataRewriter1_13To1_12_2 extends EntityRewriter { - int oldId = meta.value(); - int combined = (((oldId & 4095) << 4) | (oldId >> 12 & 15)); - int newId = WorldPackets.toNewId(combined); + final int oldId = meta.value(); + final int combined = (((oldId & 4095) << 4) | (oldId >> 12 & 15)); + final int newId = WorldPackets.toNewId(combined); meta.setValue(newId); }); @@ -108,4 +107,4 @@ public class MetadataRewriter1_13To1_12_2 extends EntityRewriter> 4) << 16 | oldId & 0xF; + rawId = IdAndData.getId(oldId) << 16 | oldId & 0xF; } } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java index 190b8187b..501c5b642 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_13to1_12_2/packets/WorldPackets.java @@ -45,6 +45,7 @@ import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.data.ParticleRew import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.BlockEntityProvider; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.providers.PaintingProvider; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.storage.BlockStorage; +import com.viaversion.viaversion.util.IdAndData; import com.viaversion.viaversion.util.Key; import it.unimi.dsi.fastutil.ints.IntOpenHashSet; import it.unimi.dsi.fastutil.ints.IntSet; @@ -569,7 +570,7 @@ public class WorldPackets { if (newId != -1) { return newId; } - newId = Protocol1_13To1_12_2.MAPPINGS.getBlockMappings().getNewId(oldId & ~0xF); // Remove data + newId = Protocol1_13To1_12_2.MAPPINGS.getBlockMappings().getNewId(IdAndData.removeData(oldId)); // Remove data if (newId != -1) { if (!Via.getConfig().isSuppressConversionWarnings() || Via.getManager().isDebug()) { Via.getPlatform().getLogger().warning("Missing block " + oldId); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java index cd28caee9..a6410b182 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_14to1_13_2/Protocol1_14To1_13_2.java @@ -140,6 +140,7 @@ public class Protocol1_14To1_13_2 extends AbstractProtocol tagRewriter; + private final TagRewriter tagRewriter = new TagRewriter<>(this); public Protocol1_15To1_14_4() { super(ClientboundPackets1_14_4.class, ClientboundPackets1_15.class, ServerboundPackets1_14.class, ServerboundPackets1_14.class); @@ -61,12 +61,13 @@ public class Protocol1_15To1_14_4 extends AbstractProtocol itemRewriter.handleItemToServer(wrapper.passthrough(Type.ITEM1_13_2))); - tagRewriter = new TagRewriter<>(this); tagRewriter.register(ClientboundPackets1_14_4.TAGS, RegistryType.ENTITY); } @Override protected void onMappingDataLoaded() { + super.onMappingDataLoaded(); + int[] shulkerBoxes = new int[17]; int shulkerBoxOffset = 501; for (int i = 0; i < 17; i++) { @@ -94,4 +95,9 @@ public class Protocol1_15To1_14_4 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/metadata/MetadataRewriter1_15To1_14_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/metadata/MetadataRewriter1_15To1_14_4.java index af211853b..f5aeb25c8 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/metadata/MetadataRewriter1_15To1_14_4.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/metadata/MetadataRewriter1_15To1_14_4.java @@ -33,7 +33,7 @@ public class MetadataRewriter1_15To1_14_4 extends EntityRewriter { int data = meta.value(); meta.setValue(protocol.getMappingData().getNewBlockStateId(data)); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/Protocol1_16_2To1_16_1.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/Protocol1_16_2To1_16_1.java index e1332ff4b..d1043879a 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/Protocol1_16_2To1_16_1.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/Protocol1_16_2To1_16_1.java @@ -39,7 +39,7 @@ public class Protocol1_16_2To1_16_1 extends AbstractProtocol tagRewriter; + private final TagRewriter tagRewriter = new TagRewriter<>(this); public Protocol1_16_2To1_16_1() { super(ClientboundPackets1_16.class, ClientboundPackets1_16_2.class, ServerboundPackets1_16.class, ServerboundPackets1_16_2.class); @@ -52,7 +52,6 @@ public class Protocol1_16_2To1_16_1 extends AbstractProtocol(this); tagRewriter.register(ClientboundPackets1_16.TAGS, RegistryType.ENTITY); new StatisticsRewriter<>(this).register(ClientboundPackets1_16.STATISTICS); @@ -85,19 +84,21 @@ public class Protocol1_16_2To1_16_1 extends AbstractProtocol tagRewriter.addEmptyTags(RegistryType.ITEM, "minecraft:soul_fire_base_blocks", "minecraft:furnace_materials", "minecraft:crimson_stems", - "minecraft:gold_ores", "minecraft:piglin_loved", "minecraft:piglin_repellents", "minecraft:creeper_drop_music_discs", - "minecraft:logs_that_burn", "minecraft:stone_tool_materials", "minecraft:warped_stems"); + "minecraft:gold_ores", "minecraft:piglin_loved", "minecraft:piglin_repellents", "minecraft:creeper_drop_music_discs", + "minecraft:logs_that_burn", "minecraft:stone_tool_materials", "minecraft:warped_stems"); tagRewriter.addEmptyTags(RegistryType.BLOCK, "minecraft:infiniburn_nether", "minecraft:crimson_stems", - "minecraft:wither_summon_base_blocks", "minecraft:infiniburn_overworld", "minecraft:piglin_repellents", - "minecraft:hoglin_repellents", "minecraft:prevent_mob_spawning_inside", "minecraft:wart_blocks", - "minecraft:stone_pressure_plates", "minecraft:nylium", "minecraft:gold_ores", "minecraft:pressure_plates", - "minecraft:logs_that_burn", "minecraft:strider_warm_blocks", "minecraft:warped_stems", "minecraft:infiniburn_end", - "minecraft:base_stone_nether", "minecraft:base_stone_overworld"); + "minecraft:wither_summon_base_blocks", "minecraft:infiniburn_overworld", "minecraft:piglin_repellents", + "minecraft:hoglin_repellents", "minecraft:prevent_mob_spawning_inside", "minecraft:wart_blocks", + "minecraft:stone_pressure_plates", "minecraft:nylium", "minecraft:gold_ores", "minecraft:pressure_plates", + "minecraft:logs_that_burn", "minecraft:strider_warm_blocks", "minecraft:warped_stems", "minecraft:infiniburn_end", + "minecraft:base_stone_nether", "minecraft:base_stone_overworld"); } @Override @@ -119,4 +120,9 @@ public class Protocol1_16_2To1_16_1 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/metadata/MetadataRewriter1_16_2To1_16_1.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/metadata/MetadataRewriter1_16_2To1_16_1.java index d13fb582a..f4f6023e1 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/metadata/MetadataRewriter1_16_2To1_16_1.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16_2to1_16_1/metadata/MetadataRewriter1_16_2To1_16_1.java @@ -34,7 +34,7 @@ public class MetadataRewriter1_16_2To1_16_1 extends EntityRewriter { int data = meta.value(); meta.setValue(protocol.getMappingData().getNewBlockStateId(data)); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java index 3385ae479..355ee403f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/Protocol1_16To1_15_2.java @@ -61,7 +61,7 @@ public class Protocol1_16To1_15_2 extends AbstractProtocol tagRewriter; + private final TagRewriter tagRewriter = new TagRewriter<>(this); public Protocol1_16To1_15_2() { super(ClientboundPackets1_15.class, ClientboundPackets1_16.class, ServerboundPackets1_14.class, ServerboundPackets1_16.class); @@ -74,7 +74,6 @@ public class Protocol1_16To1_15_2 extends AbstractProtocol(this); tagRewriter.register(ClientboundPackets1_15.TAGS, RegistryType.ENTITY); new StatisticsRewriter<>(this).register(ClientboundPackets1_15.STATISTICS); @@ -169,7 +168,7 @@ public class Protocol1_16To1_15_2 extends AbstractProtocol 32) { if (!Via.getConfig().isSuppressConversionWarnings()) { - Via.getPlatform().getLogger().warning("Ignoring incoming plugin channel, as it is longer than 32 characters: " + channel); + Via.getPlatform().getLogger().warning("Ignoring serverbound plugin channel, as it is longer than 32 characters: " + channel); } wrapper.cancel(); } else if (namespacedChannel.equals("minecraft:register") || namespacedChannel.equals("minecraft:unregister")) { @@ -178,7 +177,7 @@ public class Protocol1_16To1_15_2 extends AbstractProtocol 32) { if (!Via.getConfig().isSuppressConversionWarnings()) { - Via.getPlatform().getLogger().warning("Ignoring incoming plugin channel register of '" + Via.getPlatform().getLogger().warning("Ignoring serverbound plugin channel register of '" + registeredChannel + "', as it is longer than 32 characters"); } continue; @@ -213,6 +212,8 @@ public class Protocol1_16To1_15_2 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/metadata/MetadataRewriter1_16To1_15_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/metadata/MetadataRewriter1_16To1_15_2.java index dd241c109..7a4bc0da3 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/metadata/MetadataRewriter1_16To1_15_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_16to1_15_2/metadata/MetadataRewriter1_16To1_15_2.java @@ -37,7 +37,7 @@ public class MetadataRewriter1_16To1_15_2 extends EntityRewriter { int data = meta.value(); meta.setValue(protocol.getMappingData().getNewBlockStateId(data)); diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4.java index a9f135a9a..d27d7c858 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_17to1_16_4/Protocol1_17To1_16_4.java @@ -188,7 +188,7 @@ public final class Protocol1_17To1_16_4 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } 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 8b5cf1633..36ae78f52 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 @@ -158,7 +158,7 @@ public final class EntityPackets extends EntityRewriter { + public Protocol1_18_2To1_18() { super(ClientboundPackets1_18.class, ClientboundPackets1_18.class, ServerboundPackets1_17.class, ServerboundPackets1_17.class); } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/Protocol1_18To1_17_1.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/Protocol1_18To1_17_1.java index ed1aa7359..e2013a3b7 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/Protocol1_18To1_17_1.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_18to1_17_1/Protocol1_18To1_17_1.java @@ -43,6 +43,7 @@ public final class Protocol1_18To1_17_1 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_18To1_17_1() { super(ClientboundPackets1_17_1.class, ClientboundPackets1_18.class, ServerboundPackets1_17.class, ServerboundPackets1_17.class); @@ -58,7 +59,6 @@ public final class Protocol1_18To1_17_1 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); tagRewriter.registerGeneric(ClientboundPackets1_17_1.TAGS); tagRewriter.addEmptyTags(RegistryType.BLOCK, "minecraft:lava_pool_stone_cannot_replace", "minecraft:big_dripleaf_placeable", "minecraft:wolves_spawnable_on", "minecraft:rabbits_spawnable_on", "minecraft:polar_bears_spawnable_on_in_frozen_ocean", "minecraft:parrots_spawnable_on", @@ -85,6 +85,7 @@ public final class Protocol1_18To1_17_1 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_19_3To1_19_1() { super(ClientboundPackets1_19_1.class, ClientboundPackets1_19_3.class, ServerboundPackets1_19_1.class, ServerboundPackets1_19_3.class); @@ -73,8 +74,6 @@ public final class Protocol1_19_3To1_19_1 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); - // Flint and steel was hardcoded before 1.19.3 to ignite a creeper; has been moved to a tag - adding this ensures offhand doesn't trigger as well tagRewriter.addTagRaw(RegistryType.ITEM, "minecraft:creeper_igniters", 733); // 733 = flint_and_steel 1.19.3 @@ -377,4 +376,9 @@ public final class Protocol1_19_3To1_19_1 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/packets/EntityPackets.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/packets/EntityPackets.java index 3e75b8d0f..e5756893f 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/packets/EntityPackets.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_3to1_19_1/packets/EntityPackets.java @@ -152,7 +152,7 @@ public final class EntityPackets extends EntityRewriter Types1_19_3.META_TYPES.byId(typeId >= 2 ? typeId + 1 : typeId)); // Long added - registerMetaTypeHandler(Types1_19_3.META_TYPES.itemType, Types1_19_3.META_TYPES.blockStateType, null, Types1_19_3.META_TYPES.particleType, null); + registerMetaTypeHandler(Types1_19_3.META_TYPES.itemType, Types1_19_3.META_TYPES.blockStateType, Types1_19_3.META_TYPES.particleType); filter().type(EntityTypes1_19_3.ENTITY).index(6).handler((event, meta) -> { // Sitting pose added diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/Protocol1_19_4To1_19_3.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/Protocol1_19_4To1_19_3.java index dd79cc6cd..d05b33833 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/Protocol1_19_4To1_19_3.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19_4to1_19_3/Protocol1_19_4To1_19_3.java @@ -45,6 +45,7 @@ public final class Protocol1_19_4To1_19_3 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_19_4To1_19_3() { super(ClientboundPackets1_19_3.class, ClientboundPackets1_19_4.class, ServerboundPackets1_19_3.class, ServerboundPackets1_19_4.class); @@ -54,7 +55,7 @@ public final class Protocol1_19_4To1_19_3 extends AbstractProtocol(this).registerGeneric(ClientboundPackets1_19_3.TAGS); + tagRewriter.registerGeneric(ClientboundPackets1_19_3.TAGS); new StatisticsRewriter<>(this).register(ClientboundPackets1_19_3.STATISTICS); final SoundRewriter soundRewriter = new SoundRewriter<>(this); @@ -127,4 +128,9 @@ public final class Protocol1_19_4To1_19_3 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/Protocol1_19To1_18_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/Protocol1_19To1_18_2.java index b50b492f1..4adfc36c5 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/Protocol1_19To1_18_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_19to1_18_2/Protocol1_19To1_18_2.java @@ -55,6 +55,7 @@ public final class Protocol1_19To1_18_2 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_19To1_18_2() { super(ClientboundPackets1_18.class, ClientboundPackets1_19.class, ServerboundPackets1_17.class, ServerboundPackets1_19.class); @@ -74,7 +75,6 @@ public final class Protocol1_19To1_18_2 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); tagRewriter.registerGeneric(ClientboundPackets1_18.TAGS); entityRewriter.register(); @@ -331,4 +331,9 @@ public final class Protocol1_19To1_18_2 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } 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 edd1879ba..6ad9ab3bb 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 @@ -338,7 +338,7 @@ public final class EntityPackets extends EntityRewriter { // Convert to new block id diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/Protocol1_20_2To1_20.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/Protocol1_20_2To1_20.java index 1f1c0e3ad..9e3627b59 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/Protocol1_20_2To1_20.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_2to1_20/Protocol1_20_2To1_20.java @@ -62,6 +62,7 @@ public final class Protocol1_20_2To1_20 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_20_2To1_20() { super(ClientboundPackets1_19_4.class, ClientboundPackets1_20_2.class, ServerboundPackets1_19_4.class, ServerboundPackets1_20_2.class); @@ -100,7 +101,6 @@ public final class Protocol1_20_2To1_20 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); registerClientbound(ClientboundPackets1_19_4.TAGS, wrapper -> { tagRewriter.getGenericHandler().handle(wrapper); wrapper.resetReader(); @@ -354,4 +354,9 @@ public final class Protocol1_20_2To1_20 extends AbstractProtocol getItemRewriter() { return itemPacketRewriter; } + + @Override + public TagRewriter getTagRewriter() { + return tagRewriter; + } } diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/Protocol1_20_3To1_20_2.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/Protocol1_20_3To1_20_2.java index bf821a4af..3c811238e 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/Protocol1_20_3To1_20_2.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_3to1_20_2/Protocol1_20_3To1_20_2.java @@ -61,6 +61,7 @@ public final class Protocol1_20_3To1_20_2 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_20_3To1_20_2() { super(ClientboundPacket1_20_2.class, ClientboundPacket1_20_3.class, ServerboundPacket1_20_2.class, ServerboundPacket1_20_3.class); @@ -72,7 +73,6 @@ public final class Protocol1_20_3To1_20_2 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); tagRewriter.registerGeneric(ClientboundPackets1_20_2.TAGS); final SoundRewriter soundRewriter = new SoundRewriter<>(this); @@ -379,6 +379,11 @@ public final class Protocol1_20_3To1_20_2 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } + @Override protected PacketTypesProvider createPacketTypesProvider() { return new SimplePacketTypesProvider<>( diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/Protocol1_20_5To1_20_3.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/Protocol1_20_5To1_20_3.java index 53b338c12..edca3cd97 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/Protocol1_20_5To1_20_3.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20_5to1_20_3/Protocol1_20_5To1_20_3.java @@ -302,6 +302,11 @@ public final class Protocol1_20_5To1_20_3 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } + @Override protected PacketTypesProvider createPacketTypesProvider() { return new SimplePacketTypesProvider<>( diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/Protocol1_20To1_19_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/Protocol1_20To1_19_4.java index 9376c8804..691d6339a 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/Protocol1_20To1_19_4.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_20to1_19_4/Protocol1_20To1_19_4.java @@ -39,6 +39,7 @@ public final class Protocol1_20To1_19_4 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_20To1_19_4() { super(ClientboundPackets1_19_4.class, ClientboundPackets1_19_4.class, ServerboundPackets1_19_4.class, ServerboundPackets1_19_4.class); @@ -48,7 +49,6 @@ public final class Protocol1_20To1_19_4 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); tagRewriter.registerGeneric(ClientboundPackets1_19_4.TAGS); final SoundRewriter soundRewriter = new SoundRewriter<>(this); @@ -101,4 +101,9 @@ public final class Protocol1_20To1_19_4 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } \ No newline at end of file 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 9da9c1edd..cbf3765f4 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 @@ -20,9 +20,10 @@ package com.viaversion.viaversion.protocols.protocol1_9to1_8; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; 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.minecraft.item.Item; +import com.viaversion.viaversion.util.ComponentUtil; import com.viaversion.viaversion.util.Key; +import com.viaversion.viaversion.util.SerializerVersion; import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; import java.util.Collections; @@ -227,24 +228,11 @@ public class ItemRewriter { } for (int i = 0; i < pages.size(); i++) { - StringTag pageTag = pages.get(i); - String value = pageTag.getValue(); - if (value.replaceAll(" ", "").isEmpty()) { - value = "\"" + fixBookSpaceChars(value) + "\""; - } else { - value = fixBookSpaceChars(value); - } - pageTag.setValue(value); - } - } + final StringTag pageTag = pages.get(i); + final String value = pageTag.getValue(); - private static String fixBookSpaceChars(String str) { - if (!str.startsWith(" ")) { - return str; + pageTag.setValue(ComponentUtil.convertJson(value, SerializerVersion.V1_9, SerializerVersion.V1_8).toString()); } - // hacky but it works :) - str = "§r" + str; - return str; } public static void toClient(Item item) { @@ -287,15 +275,15 @@ public class ItemRewriter { 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(ComponentUtil.emptyJsonComponent().toString()))); tag.put("pages", pages); item.setTag(tag); return; } for (int i = 0; i < pages.size(); i++) { - StringTag page = pages.get(i); - page.setValue(Protocol1_9To1_8.fixJson(page.getValue()).toString()); + final StringTag page = pages.get(i); + page.setValue(ComponentUtil.convertJson(page.getValue(), SerializerVersion.V1_8, SerializerVersion.V1_9).toString()); } item.setTag(tag); } 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 8484f6d9f..6ab90d9e8 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/EntityRewriter.java @@ -202,6 +202,17 @@ public abstract class EntityRewriter { +public class TagRewriter implements com.viaversion.viaversion.api.rewriter.TagRewriter { private static final int[] EMPTY_ARRAY = {}; private final Protocol protocol; private final Map> newTags = new EnumMap<>(RegistryType.class); @@ -49,10 +49,12 @@ public class TagRewriter { this.protocol = protocol; } - /** - * Gets new tags from the protocol's {@link MappingData} instance. - */ - public void loadFromMappingData() { + @Override + public void onMappingDataLoaded() { + if (protocol.getMappingData() == null) { + return; + } + for (RegistryType type : RegistryType.getValues()) { List tags = protocol.getMappingData().getTags(type); if (tags != null) { @@ -61,24 +63,22 @@ public class TagRewriter { } } + @Override public void removeTags(final String registryKey) { toRemove.add(registryKey); } + @Override public void renameTag(final RegistryType type, final String registryKey, final String renameTo) { toRename.computeIfAbsent(type, t -> new HashMap<>()).put(registryKey, renameTo); } - /** - * Adds an empty tag (since the client crashes if a checked tag is not registered). - * - * @param tagType registry tag type - * @param tagId tag id - */ + @Override public void addEmptyTag(RegistryType tagType, String tagId) { getOrComputeNewTags(tagType).add(new TagData(tagId, EMPTY_ARRAY)); } + @Override public void addEmptyTags(RegistryType tagType, String... tagIds) { List tagList = getOrComputeNewTags(tagType); for (String id : tagIds) { @@ -86,12 +86,7 @@ public class TagRewriter { } } - /** - * Adds an entity tag type to be filled with the given entity type ids. - * - * @param tagId registry tag type - * @param entities mapped entity types - */ + @Override public void addEntityTag(String tagId, EntityType... entities) { int[] ids = new int[entities.length]; for (int i = 0; i < entities.length; i++) { @@ -100,13 +95,7 @@ public class TagRewriter { addTagRaw(RegistryType.ENTITY, tagId, ids); } - /** - * Adds a tag type to be filled with the given type ids after being mapped to new ids. - * - * @param tagType registry tag type - * @param tagId tag id - * @param unmappedIds unmapped type ids - */ + @Override public void addTag(RegistryType tagType, String tagId, int... unmappedIds) { List newTags = getOrComputeNewTags(tagType); IdRewriteFunction rewriteFunction = getRewriter(tagType); @@ -119,32 +108,15 @@ public class TagRewriter { newTags.add(new TagData(tagId, unmappedIds)); } - /** - * Adds a tag type to be filled with the given raw type ids. - * - * @param tagType registry tag type - * @param tagId tag id - * @param ids raw type ids - */ + @Override public void addTagRaw(RegistryType tagType, String tagId, int... ids) { getOrComputeNewTags(tagType).add(new TagData(tagId, ids)); } - /** - * Pre 1.17 reading of hardcoded registry types. - * - * @param packetType packet type - * @param readUntilType read and process the types until (including) the given registry type - */ public void register(C packetType, @Nullable RegistryType readUntilType) { protocol.registerClientbound(packetType, getHandler(readUntilType)); } - /** - * 1.17+ reading of generic tag types. - * - * @param packetType packet type - */ public void registerGeneric(C packetType) { protocol.registerClientbound(packetType, getGenericHandler()); } @@ -236,10 +208,12 @@ public class TagRewriter { } } + @Override public @Nullable List getNewTags(RegistryType tagType) { return newTags.get(tagType); } + @Override public List getOrComputeNewTags(RegistryType tagType) { return newTags.computeIfAbsent(tagType, type -> new ArrayList<>()); } diff --git a/common/src/main/java/com/viaversion/viaversion/util/Config.java b/common/src/main/java/com/viaversion/viaversion/util/Config.java index 05345aa3d..53908e8d1 100644 --- a/common/src/main/java/com/viaversion/viaversion/util/Config.java +++ b/common/src/main/java/com/viaversion/viaversion/util/Config.java @@ -21,9 +21,6 @@ import com.google.gson.JsonElement; import com.viaversion.viaversion.compatibility.YamlCompat; import com.viaversion.viaversion.compatibility.unsafe.Yaml1Compat; import com.viaversion.viaversion.compatibility.unsafe.Yaml2Compat; -import org.checkerframework.checker.nullness.qual.Nullable; -import org.yaml.snakeyaml.DumperOptions; -import org.yaml.snakeyaml.Yaml; import java.io.File; import java.io.FileInputStream; import java.io.IOException; @@ -35,6 +32,9 @@ import java.util.List; import java.util.Map; import java.util.concurrent.ConcurrentSkipListMap; import java.util.logging.Logger; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.yaml.snakeyaml.DumperOptions; +import org.yaml.snakeyaml.Yaml; @SuppressWarnings("VulnerableCodeUsages") public abstract class Config { @@ -148,7 +148,9 @@ public abstract class Config { } public void save() { - this.configFile.getParentFile().mkdirs(); + if (this.configFile.getParentFile() != null) { + this.configFile.getParentFile().mkdirs(); + } save(this.configFile, this.config); } @@ -157,7 +159,9 @@ public abstract class Config { } public void reload() { - this.configFile.getParentFile().mkdirs(); + if (this.configFile.getParentFile() != null) { + this.configFile.getParentFile().mkdirs(); + } this.config = new ConcurrentSkipListMap<>(loadConfig(this.configFile)); } @@ -245,4 +249,4 @@ public abstract class Config { return null; } } -} +} \ No newline at end of file diff --git a/template/src/main/java/com/viaversion/viaversion/template/protocols/Protocol1_99To_98.java b/template/src/main/java/com/viaversion/viaversion/template/protocols/Protocol1_99To_98.java index 4998fb24c..27a272d45 100644 --- a/template/src/main/java/com/viaversion/viaversion/template/protocols/Protocol1_99To_98.java +++ b/template/src/main/java/com/viaversion/viaversion/template/protocols/Protocol1_99To_98.java @@ -45,6 +45,7 @@ public final class Protocol1_99To_98 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); public Protocol1_99To_98() { // Passing the class types into the super constructor is needed for automatic packet type id remapping, but can otherwise be omitted @@ -55,7 +56,6 @@ public final class Protocol1_99To_98 extends AbstractProtocol tagRewriter = new TagRewriter<>(this); tagRewriter.registerGeneric(ClientboundPackets1_20_5.TAGS); tagRewriter.registerGeneric(ClientboundConfigurationPackets1_20_5.UPDATE_TAGS); @@ -109,7 +109,8 @@ public final class Protocol1_99To_98 extends AbstractProtocol getTagRewriter() { + return tagRewriter; + } } \ No newline at end of file