diff --git a/api/src/main/java/com/viaversion/viaversion/api/data/MappingData.java b/api/src/main/java/com/viaversion/viaversion/api/data/MappingData.java index 576084754..e27a963e6 100644 --- a/api/src/main/java/com/viaversion/viaversion/api/data/MappingData.java +++ b/api/src/main/java/com/viaversion/viaversion/api/data/MappingData.java @@ -22,9 +22,13 @@ */ package com.viaversion.viaversion.api.data; +import com.viaversion.viaversion.api.minecraft.RegistryType; +import com.viaversion.viaversion.api.minecraft.TagData; import com.viaversion.viaversion.util.Int2IntBiMap; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.List; + public interface MappingData { /** @@ -77,6 +81,14 @@ public interface MappingData { */ int getNewParticleId(int id); + /** + * Returns a list of tags to send if present. + * + * @param type registry tag type + * @return list of tags to send if present, else null + */ + @Nullable List getTags(RegistryType type); + @Nullable Int2IntBiMap getItemMappings(); @Nullable ParticleMappings getParticleMappings(); 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 6ac7f5ffd..f298f9892 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 @@ -22,12 +22,21 @@ */ package com.viaversion.viaversion.api.data; +import com.google.gson.JsonArray; +import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.viaversion.viaversion.api.Via; +import com.viaversion.viaversion.api.minecraft.RegistryType; +import com.viaversion.viaversion.api.minecraft.TagData; import com.viaversion.viaversion.util.Int2IntBiHashMap; import com.viaversion.viaversion.util.Int2IntBiMap; +import it.unimi.dsi.fastutil.objects.Object2IntMap; import org.checkerframework.checker.nullness.qual.Nullable; +import java.util.ArrayList; +import java.util.EnumMap; +import java.util.List; +import java.util.Map; import java.util.logging.Logger; public class MappingDataBase implements MappingData { @@ -40,6 +49,7 @@ public class MappingDataBase implements MappingData { protected Mappings blockStateMappings; protected Mappings soundMappings; protected Mappings statisticsMappings; + protected Map> tags; protected boolean loadItems = true; public MappingDataBase(String oldVersion, String newVersion) { @@ -76,9 +86,42 @@ public class MappingDataBase implements MappingData { diffmapping != null ? diffmapping.getAsJsonObject("items") : null); } + if (diffmapping != null && diffmapping.has("tags")) { + this.tags = new EnumMap<>(RegistryType.class); + JsonObject tags = diffmapping.getAsJsonObject("tags"); + if (tags.has(RegistryType.ITEM.getResourceLocation())) { + loadTags(RegistryType.ITEM, tags, MappingDataLoader.indexedObjectToMap(newMappings.getAsJsonObject("items"))); + } + if (tags.has(RegistryType.BLOCK.getResourceLocation())) { + loadTags(RegistryType.BLOCK, tags, MappingDataLoader.indexedObjectToMap(newMappings.getAsJsonObject("blocks"))); + } + } + loadExtras(oldMappings, newMappings, diffmapping); } + private void loadTags(RegistryType type, JsonObject object, Object2IntMap typeMapping) { + JsonObject tags = object.getAsJsonObject(type.getResourceLocation()); + List tagsList = new ArrayList<>(tags.size()); + for (Map.Entry entry : tags.entrySet()) { + JsonArray array = entry.getValue().getAsJsonArray(); + int[] entries = new int[array.size()]; + int i = 0; + for (JsonElement element : array) { + String stringId = element.getAsString(); + if (!typeMapping.containsKey(stringId) && !typeMapping.containsKey(stringId = stringId.replace("minecraft:", ""))) { // aaa + getLogger().warning(type + " Tags contains invalid type identifier " + stringId + " in tag " + entry.getKey()); + continue; + } + + entries[i++] = typeMapping.getInt(stringId); + } + tagsList.add(new TagData(entry.getKey(), entries)); + } + + this.tags.put(type, tagsList); + } + @Override public int getNewBlockStateId(int id) { return checkValidity(id, blockStateMappings.getNewId(id), "blockstate"); @@ -106,6 +149,11 @@ public class MappingDataBase implements MappingData { return checkValidity(id, particleMappings.getMappings().getNewId(id), "particles"); } + @Override + public @Nullable List getTags(RegistryType type) { + return tags != null ? tags.get(type) : null; + } + @Override public @Nullable Int2IntBiMap getItemMappings() { return itemMappings; 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 cf83e8ea4..34d6a1d15 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 @@ -150,7 +150,7 @@ public class MappingDataLoader { } public static void mapIdentifiers(int[] output, JsonObject oldIdentifiers, JsonObject newIdentifiers, @Nullable JsonObject diffIdentifiers) { - Object2IntMap newIdentifierMap = MappingDataLoader.indexedObjectToMap(newIdentifiers); + Object2IntMap newIdentifierMap = MappingDataLoader.indexedObjectToMap(newIdentifiers); for (Map.Entry entry : oldIdentifiers.entrySet()) { int value = mapIdentifierEntry(entry, newIdentifierMap, diffIdentifiers); if (value != -1) { diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/RegistryType.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/RegistryType.java new file mode 100644 index 000000000..410c9c3b9 --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/RegistryType.java @@ -0,0 +1,64 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2021 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.minecraft; + +import org.checkerframework.checker.nullness.qual.Nullable; + +import java.util.HashMap; +import java.util.Map; + +public enum RegistryType { + + BLOCK("block"), + ITEM("item"), + FLUID("fluid"), + ENTITY("entity_type"), + GAME_EVENT("game_event"); + + private static final Map MAP = new HashMap<>(); + private static final RegistryType[] VALUES = values(); + + static { + for (RegistryType type : getValues()) { + MAP.put(type.resourceLocation, type); + } + } + + public static RegistryType[] getValues() { + return VALUES; + } + + public static @Nullable RegistryType getByKey(String resourceKey) { + return MAP.get(resourceKey); + } + + private final String resourceLocation; + + RegistryType(final String resourceLocation) { + this.resourceLocation = resourceLocation; + } + + public String getResourceLocation() { + return resourceLocation; + } +} diff --git a/api/src/main/java/com/viaversion/viaversion/api/minecraft/TagData.java b/api/src/main/java/com/viaversion/viaversion/api/minecraft/TagData.java new file mode 100644 index 000000000..810f95080 --- /dev/null +++ b/api/src/main/java/com/viaversion/viaversion/api/minecraft/TagData.java @@ -0,0 +1,41 @@ +/* + * This file is part of ViaVersion - https://github.com/ViaVersion/ViaVersion + * Copyright (C) 2016-2021 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.minecraft; + +public final class TagData { + private final String identifier; + private final int[] entries; + + public TagData(String identifier, int[] entries) { + this.identifier = identifier; + this.entries = entries; + } + + public String identifier() { + return identifier; + } + + public int[] entries() { + return entries; + } +} diff --git a/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java b/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java index e033eddde..96d820ced 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java +++ b/common/src/main/java/com/viaversion/viaversion/protocol/ProtocolManagerImpl.java @@ -467,12 +467,15 @@ public class ProtocolManagerImpl implements ProtocolManager { private void shutdownLoaderExecutor() { Preconditions.checkArgument(!mappingsLoaded); + // If this log message is missing, something is wrong Via.getPlatform().getLogger().info("Finished mapping loading, shutting down loader executor!"); mappingsLoaded = true; mappingLoaderExecutor.shutdown(); mappingLoaderExecutor = null; mappingLoaderFutures.clear(); mappingLoaderFutures = null; + + // Clear cached json files if (MappingDataLoader.isCacheJsonMappings()) { MappingDataLoader.getMappingsCache().clear(); } 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 0499441fd..f781176b8 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 @@ -38,7 +38,7 @@ import com.viaversion.viaversion.protocols.protocol1_13_1to1_13.packets.WorldPac import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ClientboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_13to1_12_2.ServerboundPackets1_13; import com.viaversion.viaversion.protocols.protocol1_9_3to1_9_1_2.storage.ClientWorld; -import com.viaversion.viaversion.rewriter.RegistryType; +import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; diff --git a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java index d18d4281f..360f14451 100644 --- a/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java +++ b/common/src/main/java/com/viaversion/viaversion/protocols/protocol1_15to1_14_4/Protocol1_15To1_14_4.java @@ -33,7 +33,7 @@ import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.packets.EntityPa import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.packets.InventoryPackets; import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.packets.PlayerPackets; import com.viaversion.viaversion.protocols.protocol1_15to1_14_4.packets.WorldPackets; -import com.viaversion.viaversion.rewriter.RegistryType; +import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.rewriter.SoundRewriter; import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; 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 8644efc26..57505fdac 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 @@ -32,7 +32,7 @@ import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.packets.Invent import com.viaversion.viaversion.protocols.protocol1_16_2to1_16_1.packets.WorldPackets; import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.ClientboundPackets1_16; import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.ServerboundPackets1_16; -import com.viaversion.viaversion.rewriter.RegistryType; +import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.rewriter.SoundRewriter; import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; 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 a6041f10e..5c45d7969 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 @@ -41,7 +41,7 @@ import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.packets.Inventor import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.packets.WorldPackets; import com.viaversion.viaversion.protocols.protocol1_16to1_15_2.storage.InventoryTracker1_16; import com.viaversion.viaversion.rewriter.ComponentRewriter; -import com.viaversion.viaversion.rewriter.RegistryType; +import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.rewriter.SoundRewriter; import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; 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 1c560f6d5..1616df38c 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 @@ -21,6 +21,7 @@ import com.viaversion.viaversion.api.Via; import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.data.MappingData; import com.viaversion.viaversion.api.data.MappingDataBase; +import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.api.minecraft.entities.Entity1_17Types; import com.viaversion.viaversion.api.protocol.AbstractProtocol; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; @@ -35,7 +36,6 @@ import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.packets.EntityPa import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.packets.InventoryPackets; import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.packets.WorldPackets; import com.viaversion.viaversion.protocols.protocol1_17to1_16_4.storage.InventoryAcknowledgements; -import com.viaversion.viaversion.rewriter.RegistryType; import com.viaversion.viaversion.rewriter.SoundRewriter; import com.viaversion.viaversion.rewriter.StatisticsRewriter; import com.viaversion.viaversion.rewriter.TagRewriter; @@ -208,8 +208,10 @@ public final class Protocol1_17To1_16_4 extends AbstractProtocol. - */ -package com.viaversion.viaversion.rewriter; - -import org.checkerframework.checker.nullness.qual.Nullable; - -import java.util.HashMap; -import java.util.Map; - -public enum RegistryType { - - BLOCK("block"), - ITEM("item"), - FLUID("fluid"), - ENTITY("entity_type"), - GAME_EVENT("game_event"); - - private static final Map MAP = new HashMap<>(); - private static final RegistryType[] VALUES = values(); - - static { - for (RegistryType type : getValues()) { - MAP.put(type.resourceLocation, type); - } - } - - public static RegistryType[] getValues() { - return VALUES; - } - - public static @Nullable RegistryType getByKey(String resourceKey) { - return MAP.get(resourceKey); - } - - private final String resourceLocation; - - RegistryType(final String resourceLocation) { - this.resourceLocation = resourceLocation; - } - - public String getResourceLocation() { - return resourceLocation; - } -} diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/StatisticsRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/StatisticsRewriter.java index 046811a77..2327d3181 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/StatisticsRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/StatisticsRewriter.java @@ -17,6 +17,7 @@ */ package com.viaversion.viaversion.rewriter; +import com.viaversion.viaversion.api.minecraft.RegistryType; import com.viaversion.viaversion.api.protocol.Protocol; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.remapper.PacketRemapper; diff --git a/common/src/main/java/com/viaversion/viaversion/rewriter/TagRewriter.java b/common/src/main/java/com/viaversion/viaversion/rewriter/TagRewriter.java index f52375f58..ef261bc01 100644 --- a/common/src/main/java/com/viaversion/viaversion/rewriter/TagRewriter.java +++ b/common/src/main/java/com/viaversion/viaversion/rewriter/TagRewriter.java @@ -18,6 +18,9 @@ package com.viaversion.viaversion.rewriter; import com.viaversion.viaversion.api.data.MappingData; +import com.viaversion.viaversion.api.minecraft.RegistryType; +import com.viaversion.viaversion.api.minecraft.TagData; +import com.viaversion.viaversion.api.minecraft.entities.EntityType; import com.viaversion.viaversion.api.protocol.Protocol; import com.viaversion.viaversion.api.protocol.packet.ClientboundPacketType; import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; @@ -43,27 +46,74 @@ public class TagRewriter { } /** - * Adds an empty tag (since the client crashes if a checked tag is not registered.) + * Gets new tags from the protocol's {@link MappingData} instance. */ - public void addEmptyTag(RegistryType tagType, String id) { - getOrComputeNewTags(tagType).add(new TagData(id, EMPTY_ARRAY)); + public void loadFromMappingData() { + for (RegistryType type : RegistryType.getValues()) { + List tags = protocol.getMappingData().getTags(type); + if (tags != null) { + getOrComputeNewTags(type).addAll(tags); + } + } } - public void addEmptyTags(RegistryType tagType, String... ids) { + /** + * Adds an empty tag (since the client crashes if a checked tag is not registered). + * + * @param tagType registry tag type + * @param tagId tag id + */ + public void addEmptyTag(RegistryType tagType, String tagId) { + getOrComputeNewTags(tagType).add(new TagData(tagId, EMPTY_ARRAY)); + } + + public void addEmptyTags(RegistryType tagType, String... tagIds) { List tagList = getOrComputeNewTags(tagType); - for (String id : ids) { + for (String id : tagIds) { tagList.add(new TagData(id, EMPTY_ARRAY)); } } - public void addTag(RegistryType tagType, String id, int... oldIds) { + /** + * Adds an entity tag type to be filled with the given entity type ids. + * + * @param tagId registry tag type + * @param entities mapped entity types + */ + public void addEntityTag(String tagId, EntityType... entities) { + int[] ids = new int[entities.length]; + for (int i = 0; i < entities.length; i++) { + ids[i] = entities[i].getId(); + } + 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 + */ + public void addTag(RegistryType tagType, String tagId, int... unmappedIds) { List newTags = getOrComputeNewTags(tagType); IdRewriteFunction rewriteFunction = getRewriter(tagType); - for (int i = 0; i < oldIds.length; i++) { - int oldId = oldIds[i]; - oldIds[i] = rewriteFunction.rewrite(oldId); + for (int i = 0; i < unmappedIds.length; i++) { + int oldId = unmappedIds[i]; + unmappedIds[i] = rewriteFunction.rewrite(oldId); } - newTags.add(new TagData(id, oldIds)); + 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 + */ + public void addTagRaw(RegistryType tagType, String tagId, int... ids) { + getOrComputeNewTags(tagType).add(new TagData(tagId, ids)); } /** @@ -154,8 +204,8 @@ public class TagRewriter { // Send new tags if present if (newTags != null) { for (TagData tag : newTags) { - wrapper.write(Type.STRING, tag.identifier); - wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, tag.entries); + wrapper.write(Type.STRING, tag.identifier()); + wrapper.write(Type.VAR_INT_ARRAY_PRIMITIVE, tag.entries()); } } } @@ -183,22 +233,4 @@ public class TagRewriter { return null; } } - - public static final class TagData { - private final String identifier; - private final int[] entries; - - public TagData(String identifier, int[] entries) { - this.identifier = identifier; - this.entries = entries; - } - - public String getIdentifier() { - return identifier; - } - - public int[] getEntries() { - return entries; - } - } } diff --git a/common/src/main/resources/assets/viaversion/data/mappingdiff-1.16.2to1.17.json b/common/src/main/resources/assets/viaversion/data/mappingdiff-1.16.2to1.17.json index 0941f9fbe..8edb5c431 100644 --- a/common/src/main/resources/assets/viaversion/data/mappingdiff-1.16.2to1.17.json +++ b/common/src/main/resources/assets/viaversion/data/mappingdiff-1.16.2to1.17.json @@ -60,5 +60,83 @@ }, "items": { "372": "minecraft:dirt_path" + }, + "tags": { + "block": { + "minecraft:cauldrons": [ + "minecraft:cauldron" + ], + "minecraft:mineable/hoe": [ + "minecraft:nether_wart_block", + "minecraft:warped_wart_block", + "minecraft:hay_block", + "minecraft:dried_kelp_block", + "minecraft:target", + "minecraft:shroomlight", + "minecraft:sponge", + "minecraft:wet_sponge", + "minecraft:jungle_leaves", + "minecraft:oak_leaves", + "minecraft:spruce_leaves", + "minecraft:dark_oak_leaves", + "minecraft:acacia_leaves", + "minecraft:birch_leaves" + ], + "minecraft:mineable/shovel": [ + "minecraft:clay", + "minecraft:dirt", + "minecraft:coarse_dirt", + "minecraft:podzol", + "minecraft:farmland", + "minecraft:grass_block", + "minecraft:gravel", + "minecraft:mycelium", + "minecraft:sand", + "minecraft:red_sand", + "minecraft:snow_block", + "minecraft:snow", + "minecraft:soul_sand", + "minecraft:dirt_path", + "minecraft:white_concrete_powder", + "minecraft:orange_concrete_powder", + "minecraft:magenta_concrete_powder", + "minecraft:light_blue_concrete_powder", + "minecraft:yellow_concrete_powder", + "minecraft:lime_concrete_powder", + "minecraft:pink_concrete_powder", + "minecraft:gray_concrete_powder", + "minecraft:light_gray_concrete_powder", + "minecraft:cyan_concrete_powder", + "minecraft:purple_concrete_powder", + "minecraft:blue_concrete_powder", + "minecraft:brown_concrete_powder", + "minecraft:green_concrete_powder", + "minecraft:red_concrete_powder", + "minecraft:black_concrete_powder", + "minecraft:soul_soil" + ], + "minecraft:needs_diamond_tool": [ + "minecraft:obsidian", + "minecraft:crying_obsidian", + "minecraft:netherite_block", + "minecraft:respawn_anchor", + "minecraft:ancient_debris" + ], + "minecraft:needs_iron_tool": [ + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_ore", + "minecraft:emerald_block", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore" + ], + "minecraft:needs_stone_tool": [ + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore" + ] + } } } \ No newline at end of file