From 64b9926e55429f24a9120390f2dd10e9e5c313ac Mon Sep 17 00:00:00 2001 From: RaphiMC <50594595+RaphiMC@users.noreply.github.com> Date: Fri, 26 Apr 2024 18:00:03 +0200 Subject: [PATCH] Full 1.20.5 client and server support --- README.md | 27 +- build.gradle | 12 +- .../java/net/raphimc/viaproxy/ViaProxy.java | 2 +- .../IBlockItemPacketRewriter1_20_5.java | 25 + .../MixinBlockItemPacketRewriter1_20_5.java | 213 + .../MixinEntityPacketRewriter1_20_5.java | 86 + .../injection/mixins/MixinItemRewriter.java | 128 + .../mixins/MixinProtocol1_20_5To1_20_3.java | 43 + .../mixins/MixinProtocolVersion.java | 87 - .../ProtocolTranslator.java | 2 + .../impl/ViaProxyMappingDataLoader.java | 63 + .../impl/ViaProxyVLLoader.java | 3 + .../providers/ViaProxyTransferProvider.java | 15 +- .../client2proxy/Client2ProxyHandler.java | 6 + .../packethandler/TransferPacketHandler.java | 2 + .../proxy/util/TransferDataHolder.java | 14 +- .../java/net/raphimc/viaproxy/ui/I18n.java | 2 +- .../net/raphimc/viaproxy/ui/SplashScreen.java | 2 +- .../raphimc/viaproxy/ui/ViaProxyWindow.java | 2 +- .../viaproxy/data/item-attributes-1.8.json | 232 ++ .../viaproxy/data/item-identifiers-1.8.json | 47 + .../viaproxy/data/item-tool-components.json | 3073 +++++++++++++++ .../viaproxy/data/materials-1.19.4.json | 3417 +++++++++++++++++ .../assets/{ => viaproxy}/icons/icon.png | Bin .../{ => viaproxy}/language/cs_CZ.properties | 0 .../{ => viaproxy}/language/de_DE.properties | 0 .../{ => viaproxy}/language/en_US.properties | 0 .../{ => viaproxy}/language/hu_HU.properties | 0 .../{ => viaproxy}/language/pl_PL.properties | 0 .../{ => viaproxy}/language/ru_RU.properties | 0 .../{ => viaproxy}/language/zh_CN.properties | 0 31 files changed, 7393 insertions(+), 110 deletions(-) create mode 100644 src/main/java/net/raphimc/viaproxy/injection/interfaces/IBlockItemPacketRewriter1_20_5.java create mode 100644 src/main/java/net/raphimc/viaproxy/injection/mixins/MixinBlockItemPacketRewriter1_20_5.java create mode 100644 src/main/java/net/raphimc/viaproxy/injection/mixins/MixinEntityPacketRewriter1_20_5.java create mode 100644 src/main/java/net/raphimc/viaproxy/injection/mixins/MixinItemRewriter.java create mode 100644 src/main/java/net/raphimc/viaproxy/injection/mixins/MixinProtocol1_20_5To1_20_3.java delete mode 100644 src/main/java/net/raphimc/viaproxy/injection/mixins/MixinProtocolVersion.java create mode 100644 src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyMappingDataLoader.java create mode 100644 src/main/resources/assets/viaproxy/data/item-attributes-1.8.json create mode 100644 src/main/resources/assets/viaproxy/data/item-identifiers-1.8.json create mode 100644 src/main/resources/assets/viaproxy/data/item-tool-components.json create mode 100644 src/main/resources/assets/viaproxy/data/materials-1.19.4.json rename src/main/resources/assets/{ => viaproxy}/icons/icon.png (100%) rename src/main/resources/assets/{ => viaproxy}/language/cs_CZ.properties (100%) rename src/main/resources/assets/{ => viaproxy}/language/de_DE.properties (100%) rename src/main/resources/assets/{ => viaproxy}/language/en_US.properties (100%) rename src/main/resources/assets/{ => viaproxy}/language/hu_HU.properties (100%) rename src/main/resources/assets/{ => viaproxy}/language/pl_PL.properties (100%) rename src/main/resources/assets/{ => viaproxy}/language/ru_RU.properties (100%) rename src/main/resources/assets/{ => viaproxy}/language/zh_CN.properties (100%) diff --git a/README.md b/README.md index 90b43ecf..54e7f84c 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ Standalone proxy which allows players to join EVERY Minecraft server version (Cl To download the latest version, go to the [Releases section](#executable-jar-file) and download the latest version. Using it is very simple, just run the jar file, and it will start a user interface where everything can be configured. -For a full user guide go to the [Usage for Players](#usage-for-players-gui) section or the [Usage for Server Owners](#usage-for-server-owners-cli) section. +For a full user guide go to the [Usage for Players](#usage-for-players-gui) section or the [Usage for Server Owners](#usage-for-server-owners-config) section. ## Supported Server versions - Release (1.0.0 - 1.20.5) @@ -24,6 +24,7 @@ ViaProxy supports joining to any of the listed server version from any of the li ## Special Features - Support for joining online mode servers - Support for joining on servers which have chat signing enabled from all listed client versions +- Supports transfer and cookies for <=1.20.4 clients on 1.20.5+ servers - Allows joining Minecraft Realms with any supported client version ## Releases @@ -70,19 +71,27 @@ dependencies { 7. Join with your Minecraft client on the displayed address 8. Have fun! -## Usage for Server owners (CLI) +## Usage for Server owners (Config) 1. Download the latest version from the [Releases section](#executable-jar-file) 2. Put the jar file into a folder (ViaProxy will generate config files and store some data there) -3. Run the jar file (Using java -jar ViaProxy-whateverversion.jar --help) -4. Look at the available config options and use those you need just like you would in the GUI -5. Start the proxy using the start command and test whether it works (Join using the server's public address and the bind port you configured) -6. Have fun! +3. Run the jar file (Using ``java -jar ViaProxy-whateverversion.jar config viaproxy.yml``) +4. ViaProxy now generates a config file called ``viaproxy.yml`` in the same folder and exits +5. Open the config file and configure the proxy (Most important options are at the top) +6. Start the proxy using the start command and test whether it works (Join using the server's public address and the bind port you configured) +7. Have fun! -Here is an example command to allow players to join on yourserverip:25568 and connect to a beta 1.7.3 server running on port 25565: -``java -jar ViaProxy-whateverversion.jar --bind_address 0.0.0.0:25568 --target_ip 127.0.0.1:25565 --version b1.7-b1.7.3`` +## Usage for Server owners (CLI) +1. Download the latest version from the [Releases section](#executable-jar-file) +2. Put the jar file into a folder (ViaProxy will generate config files and store some data there) +3. Run the jar file (Using ``java -jar ViaProxy-whateverversion.jar cli --help``) +4. ViaProxy will print the CLI usage and exit +5. Configure the proxy and optionally put the finished start command into a script +6. Start the proxy using the start command and test whether it works (Join using the server's public address and the bind port you configured) +7. Have fun! ### Configuring the protocol translation -To change the protocol translation settings/features you can look into the ViaLoader folder. +To change ViaProxy settings you can check out the ``viaproxy.yml`` config file. Most of the settings are configurable via the GUI. +To change the protocol translation settings/features you can look into the ``ViaLoader`` folder. You will find 5 config files there: - viaversion.yml (ViaVersion) - viabackwards.yml (ViaBackwards) diff --git a/build.gradle b/build.gradle index 18516a9f..da1335dc 100644 --- a/build.gradle +++ b/build.gradle @@ -54,16 +54,16 @@ repositories { } dependencies { - include "com.viaversion:viaversion-common:4.10.0-24w09a-SNAPSHOT" - include "com.viaversion:viabackwards-common:4.10.0-24w09a-SNAPSHOT" - include "com.viaversion:viarewind-common:3.0.7-24w09a-SNAPSHOT" - include "net.raphimc:ViaLegacy:2.2.22-SNAPSHOT" - include "net.raphimc:ViaAprilFools:2.0.11-SNAPSHOT" + include "com.viaversion:viaversion-common:4.10.0" + include "com.viaversion:viabackwards-common:4.10.0" + include "com.viaversion:viarewind-common:3.1.0" + include "net.raphimc:ViaLegacy:2.2.22" + include "net.raphimc:ViaAprilFools:2.0.11" include("net.raphimc:ViaBedrock:0.0.6-SNAPSHOT") { exclude group: "io.netty" exclude group: "io.jsonwebtoken" } - include("net.raphimc:ViaLoader:2.2.13-SNAPSHOT") { + include("net.raphimc:ViaLoader:2.2.13") { exclude group: "org.slf4j", module: "slf4j-api" } diff --git a/src/main/java/net/raphimc/viaproxy/ViaProxy.java b/src/main/java/net/raphimc/viaproxy/ViaProxy.java index 47977e41..6b2b27b1 100644 --- a/src/main/java/net/raphimc/viaproxy/ViaProxy.java +++ b/src/main/java/net/raphimc/viaproxy/ViaProxy.java @@ -111,7 +111,7 @@ public static void injectedMain(final String injectionMethod, final String[] arg Logger.setup(); final boolean useUI = args.length == 0 && !GraphicsEnvironment.isHeadless(); - final boolean useConfig = args.length > 0 && args[0].equals("config"); + final boolean useConfig = args.length == 2 && args[0].equals("config"); final boolean useCLI = args.length > 0 && args[0].equals("cli"); final boolean useLegacyCLI = args.length > 0 && args[0].startsWith("-"); if (!useUI && !useConfig && !useCLI && !useLegacyCLI) { diff --git a/src/main/java/net/raphimc/viaproxy/injection/interfaces/IBlockItemPacketRewriter1_20_5.java b/src/main/java/net/raphimc/viaproxy/injection/interfaces/IBlockItemPacketRewriter1_20_5.java new file mode 100644 index 00000000..bb6092e8 --- /dev/null +++ b/src/main/java/net/raphimc/viaproxy/injection/interfaces/IBlockItemPacketRewriter1_20_5.java @@ -0,0 +1,25 @@ +/* + * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy + * Copyright (C) 2021-2024 RK_01/RaphiMC 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 net.raphimc.viaproxy.injection.interfaces; + +public interface IBlockItemPacketRewriter1_20_5 { + + void onMappingDataLoaded(); + +} diff --git a/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinBlockItemPacketRewriter1_20_5.java b/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinBlockItemPacketRewriter1_20_5.java new file mode 100644 index 00000000..2d96e8fe --- /dev/null +++ b/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinBlockItemPacketRewriter1_20_5.java @@ -0,0 +1,213 @@ +/* + * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy + * Copyright (C) 2021-2024 RK_01/RaphiMC 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 net.raphimc.viaproxy.injection.mixins; + +import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.minecraft.HolderSet; +import com.viaversion.viaversion.api.minecraft.data.StructuredDataContainer; +import com.viaversion.viaversion.api.minecraft.data.StructuredDataKey; +import com.viaversion.viaversion.api.minecraft.item.Item; +import com.viaversion.viaversion.api.minecraft.item.data.FoodEffect; +import com.viaversion.viaversion.api.minecraft.item.data.FoodProperties; +import com.viaversion.viaversion.api.minecraft.item.data.ToolProperties; +import com.viaversion.viaversion.api.minecraft.item.data.ToolRule; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import com.viaversion.viaversion.libs.fastutil.ints.IntOpenHashSet; +import com.viaversion.viaversion.libs.fastutil.ints.IntSet; +import com.viaversion.viaversion.libs.gson.JsonArray; +import com.viaversion.viaversion.libs.gson.JsonElement; +import com.viaversion.viaversion.libs.gson.JsonObject; +import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPacket1_20_3; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ServerboundPacket1_20_5; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.BlockItemPacketRewriter1_20_5; +import com.viaversion.viaversion.rewriter.ItemRewriter; +import net.raphimc.vialegacy.api.LegacyProtocolVersion; +import net.raphimc.viaproxy.injection.interfaces.IBlockItemPacketRewriter1_20_5; +import net.raphimc.viaproxy.protocoltranslator.impl.ViaProxyMappingDataLoader; +import net.raphimc.viaproxy.util.logging.Logger; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; + +import java.util.*; + +@Mixin(value = BlockItemPacketRewriter1_20_5.class, remap = false) +public abstract class MixinBlockItemPacketRewriter1_20_5 extends ItemRewriter implements IBlockItemPacketRewriter1_20_5 { + + @Unique + private final Set foodItems_b1_7_3 = new HashSet<>(); + + @Unique + private final Map armorMaxDamage_b1_8_1 = new HashMap<>(); + + @Unique + private final Set swordItems1_8 = new HashSet<>(); + + @Unique + private final Map> toolDataChanges = new LinkedHashMap<>(); + + public MixinBlockItemPacketRewriter1_20_5() { + super(null, null, null, null, null); + } + + @Override + public void onMappingDataLoaded() { + this.foodItems_b1_7_3.add("minecraft:apple"); + this.foodItems_b1_7_3.add("minecraft:mushroom_stew"); + this.foodItems_b1_7_3.add("minecraft:bread"); + this.foodItems_b1_7_3.add("minecraft:porkchop"); + this.foodItems_b1_7_3.add("minecraft:cooked_porkchop"); + this.foodItems_b1_7_3.add("minecraft:golden_apple"); + this.foodItems_b1_7_3.add("minecraft:cod"); + this.foodItems_b1_7_3.add("minecraft:cooked_cod"); + this.foodItems_b1_7_3.add("minecraft:cookie"); + + this.armorMaxDamage_b1_8_1.put("minecraft:leather_helmet", 33); + this.armorMaxDamage_b1_8_1.put("minecraft:leather_chestplate", 48); + this.armorMaxDamage_b1_8_1.put("minecraft:leather_leggings", 45); + this.armorMaxDamage_b1_8_1.put("minecraft:leather_boots", 39); + this.armorMaxDamage_b1_8_1.put("minecraft:chainmail_helmet", 66); + this.armorMaxDamage_b1_8_1.put("minecraft:chainmail_chestplate", 96); + this.armorMaxDamage_b1_8_1.put("minecraft:chainmail_leggings", 90); + this.armorMaxDamage_b1_8_1.put("minecraft:chainmail_boots", 78); + this.armorMaxDamage_b1_8_1.put("minecraft:iron_helmet", 132); + this.armorMaxDamage_b1_8_1.put("minecraft:iron_chestplate", 192); + this.armorMaxDamage_b1_8_1.put("minecraft:iron_leggings", 180); + this.armorMaxDamage_b1_8_1.put("minecraft:iron_boots", 156); + this.armorMaxDamage_b1_8_1.put("minecraft:diamond_helmet", 264); + this.armorMaxDamage_b1_8_1.put("minecraft:diamond_chestplate", 384); + this.armorMaxDamage_b1_8_1.put("minecraft:diamond_leggings", 360); + this.armorMaxDamage_b1_8_1.put("minecraft:diamond_boots", 312); + this.armorMaxDamage_b1_8_1.put("minecraft:golden_helmet", 66); + this.armorMaxDamage_b1_8_1.put("minecraft:golden_chestplate", 96); + this.armorMaxDamage_b1_8_1.put("minecraft:golden_leggings", 90); + this.armorMaxDamage_b1_8_1.put("minecraft:golden_boots", 78); + + this.swordItems1_8.add("minecraft:wooden_sword"); + this.swordItems1_8.add("minecraft:stone_sword"); + this.swordItems1_8.add("minecraft:iron_sword"); + this.swordItems1_8.add("minecraft:golden_sword"); + this.swordItems1_8.add("minecraft:diamond_sword"); + + final JsonObject itemToolComponents = ViaProxyMappingDataLoader.INSTANCE.loadData("item-tool-components.json"); + for (Map.Entry entry : itemToolComponents.entrySet()) { + int attempts = 0; + while (ProtocolVersion.getClosest(entry.getKey()) == null) { + try { + Thread.sleep(100); + if (attempts++ > 100) { // 10 seconds + Logger.LOGGER.warn("Failed to load item-tool-components.json after 10 seconds. Skipping entry."); + break; + } + } catch (InterruptedException e) { + break; + } + } + final ProtocolVersion version = ProtocolVersion.getClosest(entry.getKey()); + if (version == null) { // Only happens if the timeout above is reached or the thread is interrupted + continue; + } + final Map toolProperties = new HashMap<>(); + final JsonArray toolComponents = entry.getValue().getAsJsonArray(); + for (JsonElement toolComponent : toolComponents) { + final JsonObject toolComponentObject = toolComponent.getAsJsonObject(); + final String item = toolComponentObject.get("item").getAsString(); + final float defaultMiningSpeed = toolComponentObject.get("default_mining_speed").getAsFloat(); + final int damagePerBlock = toolComponentObject.get("damage_per_block").getAsInt(); + final int[] suitableFor = this.blockJsonArrayToIds(version, toolComponentObject.getAsJsonArray("suitable_for")); + final List toolRules = new ArrayList<>(); + final JsonArray miningSpeeds = toolComponentObject.getAsJsonArray("mining_speeds"); + for (JsonElement miningSpeed : miningSpeeds) { + final JsonObject miningSpeedObject = miningSpeed.getAsJsonObject(); + final int[] blocks = this.blockJsonArrayToIds(version, miningSpeedObject.getAsJsonArray("blocks")); + final float speed = miningSpeedObject.get("speed").getAsFloat(); + toolRules.add(new ToolRule(HolderSet.of(blocks), speed, null)); + } + if (suitableFor.length > 0) { + toolRules.add(new ToolRule(HolderSet.of(suitableFor), null, true)); + } + toolProperties.put(item, new ToolProperties(toolRules.toArray(new ToolRule[0]), defaultMiningSpeed, damagePerBlock)); + } + this.toolDataChanges.put(version, toolProperties); + } + } + + @Inject(method = "toStructuredItem", at = @At("RETURN")) + private void appendItemDataFixComponents(UserConnection connection, Item old, CallbackInfoReturnable cir) { + final StructuredDataContainer data = cir.getReturnValue().structuredData(); + final String identifier = this.protocol.getMappingData().getFullItemMappings().identifier(cir.getReturnValue().identifier()); + if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(ProtocolVersion.v1_17_1)) { + if (identifier.equals("minecraft:crossbow")) { + data.set(StructuredDataKey.MAX_DAMAGE, 326); + } + } + if (connection.getProtocolInfo().serverProtocolVersion().betweenInclusive(LegacyProtocolVersion.b1_8tob1_8_1, ProtocolVersion.v1_8)) { + if (this.swordItems1_8.contains(identifier)) { + data.set(StructuredDataKey.FOOD, new FoodProperties(0, 0F, true, 3600, new FoodEffect[0])); + } + } + if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_8tob1_8_1)) { + if (this.armorMaxDamage_b1_8_1.containsKey(identifier)) { + data.set(StructuredDataKey.MAX_DAMAGE, this.armorMaxDamage_b1_8_1.get(identifier)); + } + } + if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(LegacyProtocolVersion.b1_7tob1_7_3)) { + if (this.foodItems_b1_7_3.contains(identifier)) { + data.set(StructuredDataKey.MAX_STACK_SIZE, 1); + data.addEmpty(StructuredDataKey.FOOD); + } + } + + for (Map.Entry> entry : this.toolDataChanges.entrySet()) { + if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(entry.getKey())) { + final ToolProperties toolProperties = entry.getValue().get(identifier); + if (toolProperties != null) { + data.set(StructuredDataKey.TOOL, toolProperties); + break; + } + } + } + } + + @Unique + private int[] blockJsonArrayToIds(final ProtocolVersion protocolVersion, final JsonArray jsonArray) { + final IntSet ids = new IntOpenHashSet(); + for (final JsonElement element : jsonArray) { + final String name = element.getAsString(); + if (name.startsWith("#")) { // Material name + final String material = name.substring(1); + for (Map.Entry> entry : ViaProxyMappingDataLoader.BLOCK_MATERIALS.entrySet()) { + for (Map.Entry materialEntry : entry.getValue().entrySet()) { + if (protocolVersion.olderThanOrEqualTo(materialEntry.getKey()) && materialEntry.getValue().equals(material)) { + ids.add(this.protocol.getMappingData().blockId(entry.getKey())); + break; + } + } + } + } else { // Block name + ids.add(this.protocol.getMappingData().blockId(element.getAsString())); + } + } + return ids.toIntArray(); + } + +} diff --git a/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinEntityPacketRewriter1_20_5.java b/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinEntityPacketRewriter1_20_5.java new file mode 100644 index 00000000..77bacb88 --- /dev/null +++ b/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinEntityPacketRewriter1_20_5.java @@ -0,0 +1,86 @@ +/* + * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy + * Copyright (C) 2021-2024 RK_01/RaphiMC 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 net.raphimc.viaproxy.injection.mixins; + +import com.viaversion.viaversion.api.connection.UserConnection; +import com.viaversion.viaversion.api.protocol.packet.PacketWrapper; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import com.viaversion.viaversion.api.type.Type; +import com.viaversion.viaversion.protocols.protocol1_20_3to1_20_2.packet.ClientboundPacket1_20_3; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.packet.ClientboundPackets1_20_5; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.EntityPacketRewriter1_20_5; +import com.viaversion.viaversion.rewriter.EntityRewriter; +import net.raphimc.vialegacy.api.LegacyProtocolVersion; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Overwrite; +import org.spongepowered.asm.mixin.Shadow; + +import java.util.UUID; + +@Mixin(value = EntityPacketRewriter1_20_5.class, remap = false) +public abstract class MixinEntityPacketRewriter1_20_5 extends EntityRewriter { + + @Shadow + @Final + private static UUID CREATIVE_BLOCK_INTERACTION_RANGE; + + @Shadow + @Final + private static UUID CREATIVE_ENTITY_INTERACTION_RANGE; + + protected MixinEntityPacketRewriter1_20_5(Protocol1_20_5To1_20_3 protocol) { + super(protocol); + } + + @Shadow + protected abstract void writeAttribute(PacketWrapper wrapper, String attributeId, double base, @Nullable UUID modifierId, double amount); + + /** + * @author RK_01 + * @reason Fix interaction range and step height differences + */ + @Overwrite + private void sendRangeAttributes(final UserConnection connection, final boolean creativeMode) throws Exception { + final PacketWrapper wrapper = PacketWrapper.create(ClientboundPackets1_20_5.ENTITY_PROPERTIES, connection); + wrapper.write(Type.VAR_INT, this.tracker(connection).clientEntityId()); + if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(ProtocolVersion.v1_7_6)) { + wrapper.write(Type.VAR_INT, 3); // Number of attributes + this.writeAttribute(wrapper, "generic.step_height", 0.5D, null, 0D); + } else { + wrapper.write(Type.VAR_INT, 2); // Number of attributes + } + if (connection.getProtocolInfo().serverProtocolVersion().olderThan(LegacyProtocolVersion.r1_0_0tor1_0_1)) { + this.writeAttribute(wrapper, "player.block_interaction_range", 4D, creativeMode ? CREATIVE_BLOCK_INTERACTION_RANGE : null, 1D); + } else { + this.writeAttribute(wrapper, "player.block_interaction_range", 4.5D, creativeMode ? CREATIVE_BLOCK_INTERACTION_RANGE : null, 0.5D); + } + if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(LegacyProtocolVersion.r1_6_4)) { + this.writeAttribute(wrapper, "player.entity_interaction_range", 3D, creativeMode ? CREATIVE_ENTITY_INTERACTION_RANGE : null, 3D); + } else if (connection.getProtocolInfo().serverProtocolVersion().olderThanOrEqualTo(ProtocolVersion.v1_13_2)) { + this.writeAttribute(wrapper, "player.entity_interaction_range", 3D, creativeMode ? CREATIVE_ENTITY_INTERACTION_RANGE : null, 1D); + } else { + this.writeAttribute(wrapper, "player.entity_interaction_range", 3D, creativeMode ? CREATIVE_ENTITY_INTERACTION_RANGE : null, 2D); + } + wrapper.scheduleSend(Protocol1_20_5To1_20_3.class); + } + +} diff --git a/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinItemRewriter.java b/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinItemRewriter.java new file mode 100644 index 00000000..960c86a5 --- /dev/null +++ b/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinItemRewriter.java @@ -0,0 +1,128 @@ +/* + * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy + * Copyright (C) 2021-2024 RK_01/RaphiMC 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 net.raphimc.viaproxy.injection.mixins; + +import com.viaversion.viaversion.api.minecraft.item.Item; +import com.viaversion.viaversion.api.minecraft.item.data.ModifierData; +import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectMap; +import com.viaversion.viaversion.libs.fastutil.ints.Int2ObjectOpenHashMap; +import com.viaversion.viaversion.libs.gson.JsonElement; +import com.viaversion.viaversion.libs.gson.JsonObject; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.CompoundTag; +import com.viaversion.viaversion.libs.opennbt.tag.builtin.ListTag; +import com.viaversion.viaversion.protocols.protocol1_9to1_8.ItemRewriter; +import com.viaversion.viaversion.util.Pair; +import net.raphimc.viaproxy.protocoltranslator.impl.ViaProxyMappingDataLoader; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Unique; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +import java.util.HashMap; +import java.util.Map; +import java.util.UUID; + +@Mixin(value = ItemRewriter.class, remap = false) +public abstract class MixinItemRewriter { + + @Unique + private static final Int2ObjectMap ITEM_IDENTIFIERS = new Int2ObjectOpenHashMap<>(); + + @Unique + private static final Map>> ITEM_ATTRIBUTES = new HashMap<>(); + + @Unique + private static final String TAG_NAME = "VV|AttributeFix"; + + @Inject(method = "", at = @At("RETURN")) + private static void loadAdditionalData(CallbackInfo ci) { + final JsonObject itemIdentifiers = ViaProxyMappingDataLoader.INSTANCE.loadData("item-identifiers-1.8.json"); + for (Map.Entry entry : itemIdentifiers.entrySet()) { + ITEM_IDENTIFIERS.put(entry.getValue().getAsInt(), entry.getKey()); + } + + final JsonObject itemAttributes = ViaProxyMappingDataLoader.INSTANCE.loadData("item-attributes-1.8.json"); + for (Map.Entry itemEntry : itemAttributes.entrySet()) { + final String itemIdentifier = itemEntry.getKey(); + final Map> attributes = new HashMap<>(); + for (Map.Entry attributeEntry : itemEntry.getValue().getAsJsonObject().entrySet()) { + final String attribute = attributeEntry.getKey(); + final JsonObject attributeData = attributeEntry.getValue().getAsJsonObject(); + final ModifierData modifierData = new ModifierData(UUID.fromString(attributeData.get("id").getAsString()), attributeData.get("name").getAsString(), attributeData.get("amount").getAsDouble(), attributeData.get("operation").getAsInt()); + final String slot = attributeData.get("slot").getAsString(); + attributes.put(attribute, new Pair<>(slot, modifierData)); + } + ITEM_ATTRIBUTES.put(itemIdentifier, attributes); + } + } + + @Inject(method = "toClient", at = @At("RETURN")) + private static void addAttributeFixData(Item item, CallbackInfo ci) { + if (item == null) return; + + final String identifier = ITEM_IDENTIFIERS.get(item.identifier()); + if (identifier != null && ITEM_ATTRIBUTES.containsKey(identifier)) { + final Map> attributes = ITEM_ATTRIBUTES.get(identifier); + final CompoundTag attributeFixTag = new CompoundTag(); + CompoundTag tag = item.tag(); + if (tag == null) { + tag = new CompoundTag(); + item.setTag(tag); + attributeFixTag.putBoolean("RemoveTag", true); + } + tag.put(TAG_NAME, attributeFixTag); + + ListTag attributeModifiers = tag.getListTag("AttributeModifiers", CompoundTag.class); + if (attributeModifiers == null) { + attributeModifiers = new ListTag<>(CompoundTag.class); + for (Map.Entry> entry : attributes.entrySet()) { + final CompoundTag attributeModifier = new CompoundTag(); + attributeModifier.putString("AttributeName", entry.getKey()); + attributeModifier.putString("Name", entry.getValue().value().name()); + attributeModifier.putDouble("Amount", entry.getValue().value().amount()); + attributeModifier.putInt("Operation", entry.getValue().value().operation()); + attributeModifier.putLong("UUIDMost", entry.getValue().value().uuid().getMostSignificantBits()); + attributeModifier.putLong("UUIDLeast", entry.getValue().value().uuid().getLeastSignificantBits()); + attributeModifier.putString("Slot", entry.getValue().key()); + attributeModifiers.add(attributeModifier); + } + tag.put("AttributeModifiers", attributeModifiers); + attributeFixTag.putBoolean("RemoveAttributeModifiers", true); + } + } + } + + @Inject(method = "toServer", at = @At("RETURN")) + private static void removeAttributeFixData(Item item, CallbackInfo ci) { + if (item == null) return; + final CompoundTag tag = item.tag(); + if (tag == null) return; + final CompoundTag attributeFixTag = tag.removeUnchecked(TAG_NAME); + if (attributeFixTag == null) return; + + if (attributeFixTag.contains("RemoveAttributeModifiers")) { + tag.remove("AttributeModifiers"); + } + if (attributeFixTag.contains("RemoveTag")) { + item.setTag(null); + } + } + +} diff --git a/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinProtocol1_20_5To1_20_3.java b/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinProtocol1_20_5To1_20_3.java new file mode 100644 index 00000000..bb2d550d --- /dev/null +++ b/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinProtocol1_20_5To1_20_3.java @@ -0,0 +1,43 @@ +/* + * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy + * Copyright (C) 2021-2024 RK_01/RaphiMC 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 net.raphimc.viaproxy.injection.mixins; + +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.rewriter.BlockItemPacketRewriter1_20_5; +import net.raphimc.viaproxy.injection.interfaces.IBlockItemPacketRewriter1_20_5; +import org.spongepowered.asm.mixin.Final; +import org.spongepowered.asm.mixin.Mixin; +import org.spongepowered.asm.mixin.Shadow; +import org.spongepowered.asm.mixin.injection.At; +import org.spongepowered.asm.mixin.injection.Inject; +import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; + +@Mixin(value = Protocol1_20_5To1_20_3.class, remap = false) +public abstract class MixinProtocol1_20_5To1_20_3 { + + @Shadow + @Final + private BlockItemPacketRewriter1_20_5 itemRewriter; + + @Inject(method = "onMappingDataLoaded", at = @At("RETURN")) + private void callOnMappingDataLoaded(CallbackInfo ci) { + ((IBlockItemPacketRewriter1_20_5) (Object) this.itemRewriter).onMappingDataLoaded(); + } + +} diff --git a/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinProtocolVersion.java b/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinProtocolVersion.java deleted file mode 100644 index c63c4e0d..00000000 --- a/src/main/java/net/raphimc/viaproxy/injection/mixins/MixinProtocolVersion.java +++ /dev/null @@ -1,87 +0,0 @@ -/* - * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy - * Copyright (C) 2021-2024 RK_01/RaphiMC 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 net.raphimc.viaproxy.injection.mixins; - -import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; -import com.viaversion.viaversion.api.protocol.version.SubVersionRange; -import com.viaversion.viaversion.util.Pair; -import org.spongepowered.asm.mixin.Mixin; -import org.spongepowered.asm.mixin.Unique; -import org.spongepowered.asm.mixin.injection.At; -import org.spongepowered.asm.mixin.injection.Inject; -import org.spongepowered.asm.mixin.injection.Redirect; -import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; - -import java.util.HashMap; -import java.util.Map; - -@Mixin(value = ProtocolVersion.class, remap = false) -public abstract class MixinProtocolVersion { - - @Unique - private static Map> remaps; - - @Inject(method = "", at = @At("HEAD")) - private static void initMaps(CallbackInfo ci) { - remaps = new HashMap<>(); - remaps.put("1.9.3/1.9.4", new Pair<>("1.9.3-1.9.4", null)); - remaps.put("1.11.1/1.11.2", new Pair<>("1.11.1-1.11.2", null)); - remaps.put("1.16.4/1.16.5", new Pair<>("1.16.4-1.16.5", null)); - remaps.put("1.18/1.18.1", new Pair<>("1.18-1.18.1", null)); - remaps.put("1.19.1/1.19.2", new Pair<>("1.19.1-1.19.2", null)); - remaps.put("1.20/1.20.1", new Pair<>("1.20-1.20.1", null)); - remaps.put("1.20.3/1.20.4", new Pair<>("1.20.3-1.20.4", null)); - remaps.put("1.20.5", new Pair<>("24w09a", null)); - } - - @Redirect(method = "", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/protocol/version/ProtocolVersion;register(ILjava/lang/String;)Lcom/viaversion/viaversion/api/protocol/version/ProtocolVersion;")) - private static ProtocolVersion unregisterAndRenameVersions(int version, String name) { - final Pair remapEntry = remaps.get(name); - if (remapEntry != null) { - if (remapEntry.key() != null) name = remapEntry.key(); - if (remapEntry.value() != null) { - return ProtocolVersion.register(version, name, remapEntry.value()); - } - } - - return ProtocolVersion.register(version, name); - } - - @SuppressWarnings({"UnresolvedMixinReference", "MixinAnnotationTarget", "InvalidInjectorMethodSignature"}) // Optional injection - @Redirect(method = "", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/protocol/version/ProtocolVersion;register(IILjava/lang/String;)Lcom/viaversion/viaversion/api/protocol/version/ProtocolVersion;"), require = 0) - private static ProtocolVersion unregisterAndRenameVersions(int version, int snapshotVersion, String name) { - final Pair remapEntry = remaps.get(name); - if (remapEntry != null) { - if (remapEntry.key() != null) name = remapEntry.key(); - } - - return ProtocolVersion.register(version, snapshotVersion, name); - } - - @Redirect(method = "", at = @At(value = "INVOKE", target = "Lcom/viaversion/viaversion/api/protocol/version/ProtocolVersion;register(ILjava/lang/String;Lcom/viaversion/viaversion/api/protocol/version/SubVersionRange;)Lcom/viaversion/viaversion/api/protocol/version/ProtocolVersion;")) - private static ProtocolVersion unregisterAndRenameVersions(int version, String name, SubVersionRange versionRange) { - final Pair remapEntry = remaps.get(name); - if (remapEntry != null) { - if (remapEntry.key() != null) name = remapEntry.key(); - if (remapEntry.value() != null) versionRange = remapEntry.value(); - } - - return ProtocolVersion.register(version, name, versionRange); - } - -} diff --git a/src/main/java/net/raphimc/viaproxy/protocoltranslator/ProtocolTranslator.java b/src/main/java/net/raphimc/viaproxy/protocoltranslator/ProtocolTranslator.java index aee54321..1b2498cc 100644 --- a/src/main/java/net/raphimc/viaproxy/protocoltranslator/ProtocolTranslator.java +++ b/src/main/java/net/raphimc/viaproxy/protocoltranslator/ProtocolTranslator.java @@ -19,6 +19,7 @@ import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import com.viaversion.viaversion.api.protocol.version.VersionType; +import com.viaversion.viaversion.protocols.protocol1_20_5to1_20_3.Protocol1_20_5To1_20_3; import net.raphimc.vialoader.ViaLoader; import net.raphimc.vialoader.impl.platform.ViaAprilFoolsPlatformImpl; import net.raphimc.vialoader.impl.platform.ViaBackwardsPlatformImpl; @@ -63,6 +64,7 @@ public static void init() { patchConfigs(); final Supplier[] platformSuppliers = ViaProxy.EVENT_MANAGER.call(new ProtocolTranslatorInitEvent(ViaBackwardsPlatformImpl::new, ViaRewindPlatformImpl::new, ViaProxyViaLegacyPlatformImpl::new, ViaAprilFoolsPlatformImpl::new, ViaBedrockPlatformImpl::new)).getPlatformSuppliers().toArray(new Supplier[0]); ViaLoader.init(new ViaProxyViaVersionPlatformImpl(), new ViaProxyVLLoader(), null, null, platformSuppliers); + Protocol1_20_5To1_20_3.strictErrorHandling = false; ProtocolVersion.register(AUTO_DETECT_PROTOCOL); } diff --git a/src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyMappingDataLoader.java b/src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyMappingDataLoader.java new file mode 100644 index 00000000..5b106700 --- /dev/null +++ b/src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyMappingDataLoader.java @@ -0,0 +1,63 @@ +/* + * This file is part of ViaProxy - https://github.com/RaphiMC/ViaProxy + * Copyright (C) 2021-2024 RK_01/RaphiMC 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 net.raphimc.viaproxy.protocoltranslator.impl; + +import com.viaversion.viaversion.api.data.MappingDataLoader; +import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; +import com.viaversion.viaversion.libs.gson.JsonElement; +import com.viaversion.viaversion.libs.gson.JsonObject; + +import java.util.HashMap; +import java.util.Map; + +public class ViaProxyMappingDataLoader extends MappingDataLoader { + + public static final Map MATERIALS = new HashMap<>(); + public static final Map> BLOCK_MATERIALS = new HashMap<>(); + + public static final ViaProxyMappingDataLoader INSTANCE = new ViaProxyMappingDataLoader(); + + private ViaProxyMappingDataLoader() { + super(ViaProxyMappingDataLoader.class, "assets/viaproxy/data/"); + + final JsonObject materialsData = this.loadData("materials-1.19.4.json"); + for (Map.Entry entry : materialsData.getAsJsonObject("materials").entrySet()) { + final JsonObject materialData = entry.getValue().getAsJsonObject(); + MATERIALS.put(entry.getKey(), new Material( + materialData.get("blocksMovement").getAsBoolean(), + materialData.get("burnable").getAsBoolean(), + materialData.get("liquid").getAsBoolean(), + materialData.get("blocksLight").getAsBoolean(), + materialData.get("replaceable").getAsBoolean(), + materialData.get("solid").getAsBoolean() + )); + } + for (Map.Entry blockEntry : materialsData.getAsJsonObject("blocks").entrySet()) { + final Map blockMaterials = new HashMap<>(); + for (Map.Entry entry : blockEntry.getValue().getAsJsonObject().entrySet()) { + blockMaterials.put(ProtocolVersion.getClosest(entry.getKey()), entry.getValue().getAsString()); + } + BLOCK_MATERIALS.put(blockEntry.getKey(), blockMaterials); + } + } + + public record Material(boolean blocksMovement, boolean burnable, boolean liquid, boolean blocksLight, boolean replaceable, boolean solid) { + } + +} diff --git a/src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyVLLoader.java b/src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyVLLoader.java index 0925ff8e..167aa9f8 100644 --- a/src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyVLLoader.java +++ b/src/main/java/net/raphimc/viaproxy/protocoltranslator/impl/ViaProxyVLLoader.java @@ -45,6 +45,9 @@ public void load() { Via.getManager().getProviders().use(HandItemProvider.class, new ViaProxyHandItemProvider()); Via.getManager().getProviders().use(VersionProvider.class, new ViaProxyVersionProvider()); + // ViaBackwards + Via.getManager().getProviders().use(com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider.class, new ViaProxyTransferProvider()); + // ViaLegacy Via.getManager().getProviders().use(GameProfileFetcher.class, new ViaProxyGameProfileFetcher()); Via.getManager().getProviders().use(EncryptionProvider.class, new ViaProxyEncryptionProvider()); diff --git a/src/main/java/net/raphimc/viaproxy/protocoltranslator/providers/ViaProxyTransferProvider.java b/src/main/java/net/raphimc/viaproxy/protocoltranslator/providers/ViaProxyTransferProvider.java index a9c868fd..dad71f69 100644 --- a/src/main/java/net/raphimc/viaproxy/protocoltranslator/providers/ViaProxyTransferProvider.java +++ b/src/main/java/net/raphimc/viaproxy/protocoltranslator/providers/ViaProxyTransferProvider.java @@ -17,7 +17,9 @@ */ package net.raphimc.viaproxy.protocoltranslator.providers; +import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.storage.CookieStorage; import com.viaversion.viaversion.api.connection.UserConnection; +import io.netty.channel.Channel; import net.raphimc.viabedrock.protocol.providers.TransferProvider; import net.raphimc.viaproxy.proxy.session.ProxyConnection; import net.raphimc.viaproxy.proxy.util.CloseAndReturn; @@ -25,15 +27,24 @@ import java.net.InetSocketAddress; -public class ViaProxyTransferProvider extends TransferProvider { +public class ViaProxyTransferProvider extends TransferProvider implements com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.provider.TransferProvider { @Override public void connectToServer(UserConnection user, InetSocketAddress newAddress) { - TransferDataHolder.addTempRedirect(ProxyConnection.fromChannel(user.getChannel()).getC2P(), newAddress); + final Channel channel = ProxyConnection.fromChannel(user.getChannel()).getC2P(); + TransferDataHolder.addTempRedirect(channel, newAddress); + if (user.has(CookieStorage.class)) { + TransferDataHolder.addCookieStorage(channel, user.get(CookieStorage.class)); + } try { ProxyConnection.fromUserConnection(user).kickClient("§aThe server transferred you to another server §7(§e" + newAddress.getHostName() + ":" + newAddress.getPort() + "§7)§a. Please reconnect to ViaProxy."); } catch (CloseAndReturn ignored) { } } + @Override + public void connectToServer(UserConnection user, String host, int port) { + this.connectToServer(user, new InetSocketAddress(host, port)); + } + } diff --git a/src/main/java/net/raphimc/viaproxy/proxy/client2proxy/Client2ProxyHandler.java b/src/main/java/net/raphimc/viaproxy/proxy/client2proxy/Client2ProxyHandler.java index 6f78d01b..b43c588f 100644 --- a/src/main/java/net/raphimc/viaproxy/proxy/client2proxy/Client2ProxyHandler.java +++ b/src/main/java/net/raphimc/viaproxy/proxy/client2proxy/Client2ProxyHandler.java @@ -18,6 +18,8 @@ package net.raphimc.viaproxy.proxy.client2proxy; import com.google.common.collect.Lists; +import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.storage.CookieStorage; +import com.viaversion.viaversion.api.connection.UserConnection; import com.viaversion.viaversion.api.protocol.version.ProtocolVersion; import io.netty.channel.ChannelFutureListener; import io.netty.channel.ChannelHandler; @@ -251,6 +253,10 @@ private void connect(final SocketAddress serverAddress, final ProtocolVersion se this.proxyConnection.getChannel().writeAndFlush(newHandshakePacket).addListeners(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE, (ChannelFutureListener) f2 -> { if (f2.isSuccess()) { this.proxyConnection.setP2sConnectionState(intendedState.getConnectionState()); + final UserConnection userConnection = this.proxyConnection.getUserConnection(); + if (userConnection.has(CookieStorage.class) && TransferDataHolder.hasCookieStorage(this.proxyConnection.getC2P())) { + userConnection.get(CookieStorage.class).cookies().putAll(TransferDataHolder.removeCookieStorage(this.proxyConnection.getC2P()).cookies()); + } } }); diff --git a/src/main/java/net/raphimc/viaproxy/proxy/packethandler/TransferPacketHandler.java b/src/main/java/net/raphimc/viaproxy/proxy/packethandler/TransferPacketHandler.java index 15ac7662..2cad7850 100644 --- a/src/main/java/net/raphimc/viaproxy/proxy/packethandler/TransferPacketHandler.java +++ b/src/main/java/net/raphimc/viaproxy/proxy/packethandler/TransferPacketHandler.java @@ -23,6 +23,7 @@ import net.raphimc.netminecraft.constants.ConnectionState; import net.raphimc.netminecraft.constants.MCPackets; import net.raphimc.netminecraft.packet.IPacket; +import net.raphimc.netminecraft.packet.PacketTypes; import net.raphimc.netminecraft.packet.UnknownPacket; import net.raphimc.netminecraft.packet.impl.configuration.S2CConfigTransfer1_20_5; import net.raphimc.viaproxy.ViaProxy; @@ -51,6 +52,7 @@ public boolean handleP2S(IPacket packet, List listeners) this.handleTransfer(transfer); final ByteBuf transferToViaProxy = Unpooled.buffer(); + PacketTypes.writeVarInt(transferToViaProxy, this.transferId); this.createTransferPacket().write(transferToViaProxy); this.proxyConnection.getC2P().writeAndFlush(transferToViaProxy).addListener(ChannelFutureListener.FIRE_EXCEPTION_ON_FAILURE); return false; diff --git a/src/main/java/net/raphimc/viaproxy/proxy/util/TransferDataHolder.java b/src/main/java/net/raphimc/viaproxy/proxy/util/TransferDataHolder.java index 0d3412f7..6b2bb388 100644 --- a/src/main/java/net/raphimc/viaproxy/proxy/util/TransferDataHolder.java +++ b/src/main/java/net/raphimc/viaproxy/proxy/util/TransferDataHolder.java @@ -17,6 +17,7 @@ */ package net.raphimc.viaproxy.proxy.util; +import com.viaversion.viabackwards.protocol.protocol1_20_3to1_20_5.storage.CookieStorage; import io.netty.channel.Channel; import java.net.InetAddress; @@ -27,21 +28,30 @@ public class TransferDataHolder { private static final Map TEMP_REDIRECTS = new ConcurrentHashMap<>(); + private static final Map COOKIE_STORAGES = new ConcurrentHashMap<>(); public static void addTempRedirect(final Channel channel, final InetSocketAddress redirect) { TEMP_REDIRECTS.put(getChannelAddress(channel), redirect); } + public static void addCookieStorage(final Channel channel, final CookieStorage cookieStorage) { + COOKIE_STORAGES.put(getChannelAddress(channel), cookieStorage); + } + public static InetSocketAddress removeTempRedirect(final Channel channel) { return TEMP_REDIRECTS.remove(getChannelAddress(channel)); } + public static CookieStorage removeCookieStorage(final Channel channel) { + return COOKIE_STORAGES.remove(getChannelAddress(channel)); + } + public static boolean hasTempRedirect(final Channel channel) { return TEMP_REDIRECTS.containsKey(getChannelAddress(channel)); } - public static InetSocketAddress getTempRedirect(final Channel channel) { - return TEMP_REDIRECTS.get(getChannelAddress(channel)); + public static boolean hasCookieStorage(final Channel channel) { + return COOKIE_STORAGES.containsKey(getChannelAddress(channel)); } private static InetAddress getChannelAddress(final Channel channel) { diff --git a/src/main/java/net/raphimc/viaproxy/ui/I18n.java b/src/main/java/net/raphimc/viaproxy/ui/I18n.java index 19979e53..68f2115d 100644 --- a/src/main/java/net/raphimc/viaproxy/ui/I18n.java +++ b/src/main/java/net/raphimc/viaproxy/ui/I18n.java @@ -38,7 +38,7 @@ public class I18n { } try { - for (Map.Entry entry : FileSystemUtil.getFilesInDirectory("assets/language").entrySet()) { + for (Map.Entry entry : FileSystemUtil.getFilesInDirectory("assets/viaproxy/language").entrySet()) { final Properties properties = new Properties(); properties.load(new InputStreamReader(new ByteArrayInputStream(entry.getValue()), StandardCharsets.UTF_8)); LOCALES.put(entry.getKey().getFileName().toString().replace(".properties", ""), properties); diff --git a/src/main/java/net/raphimc/viaproxy/ui/SplashScreen.java b/src/main/java/net/raphimc/viaproxy/ui/SplashScreen.java index a31bac11..be0a454a 100644 --- a/src/main/java/net/raphimc/viaproxy/ui/SplashScreen.java +++ b/src/main/java/net/raphimc/viaproxy/ui/SplashScreen.java @@ -44,7 +44,7 @@ private void init() throws IOException { contentPane.setOpaque(false); contentPane.setBackground(new Color(0, 0, 0, 0)); contentPane.setLayout(new BorderLayout()); - contentPane.add(new SplashPanel(ImageIO.read(SplashScreen.class.getResourceAsStream("/assets/icons/icon.png"))), BorderLayout.CENTER); + contentPane.add(new SplashPanel(ImageIO.read(SplashScreen.class.getResourceAsStream("/assets/viaproxy/icons/icon.png"))), BorderLayout.CENTER); contentPane.add(this.progressPanel, BorderLayout.SOUTH); this.setContentPane(contentPane); } diff --git a/src/main/java/net/raphimc/viaproxy/ui/ViaProxyWindow.java b/src/main/java/net/raphimc/viaproxy/ui/ViaProxyWindow.java index 572a606f..95bd575a 100644 --- a/src/main/java/net/raphimc/viaproxy/ui/ViaProxyWindow.java +++ b/src/main/java/net/raphimc/viaproxy/ui/ViaProxyWindow.java @@ -84,7 +84,7 @@ private void setLookAndFeel() { } private void loadIcons() { - this.icon = new ImageIcon(this.getClass().getClassLoader().getResource("assets/icons/icon.png")); + this.icon = new ImageIcon(this.getClass().getClassLoader().getResource("assets/viaproxy/icons/icon.png")); } private void initWindow() { diff --git a/src/main/resources/assets/viaproxy/data/item-attributes-1.8.json b/src/main/resources/assets/viaproxy/data/item-attributes-1.8.json new file mode 100644 index 00000000..1ad758c8 --- /dev/null +++ b/src/main/resources/assets/viaproxy/data/item-attributes-1.8.json @@ -0,0 +1,232 @@ +{ + "minecraft:wooden_axe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 3.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:stone_axe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 4.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:iron_axe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 5.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:golden_axe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 3.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:diamond_axe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 6.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:wooden_pickaxe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 2.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:stone_pickaxe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 3.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:iron_pickaxe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 4.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:golden_pickaxe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 2.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:diamond_pickaxe": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 5.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:wooden_shovel": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 1.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:stone_shovel": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 2.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:iron_shovel": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 3.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:golden_shovel": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 1.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:diamond_shovel": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Tool modifier", + "amount": 4.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:wooden_sword": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Weapon modifier", + "amount": 4.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:stone_sword": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Weapon modifier", + "amount": 5.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:iron_sword": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Weapon modifier", + "amount": 6.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:golden_sword": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Weapon modifier", + "amount": 4.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:diamond_sword": { + "generic.attackDamage": { + "id": "CB3F55D3-645C-4F38-A497-9C13A33DB5CF", + "name": "Weapon modifier", + "amount": 7.0, + "operation": 0, + "slot": "mainhand" + } + }, + "minecraft:wooden_hoe": { + }, + "minecraft:stone_hoe": { + }, + "minecraft:iron_hoe": { + }, + "minecraft:golden_hoe": { + }, + "minecraft:diamond_hoe": { + }, + "minecraft:leather_boots": { + }, + "minecraft:leather_leggings": { + }, + "minecraft:leather_chestplate": { + }, + "minecraft:leather_helmet": { + }, + "minecraft:chainmail_boots": { + }, + "minecraft:chainmail_leggings": { + }, + "minecraft:chainmail_chestplate": { + }, + "minecraft:chainmail_helmet": { + }, + "minecraft:iron_boots": { + }, + "minecraft:iron_leggings": { + }, + "minecraft:iron_chestplate": { + }, + "minecraft:iron_helmet": { + }, + "minecraft:golden_boots": { + }, + "minecraft:golden_leggings": { + }, + "minecraft:golden_chestplate": { + }, + "minecraft:golden_helmet": { + }, + "minecraft:diamond_boots": { + }, + "minecraft:diamond_leggings": { + }, + "minecraft:diamond_chestplate": { + }, + "minecraft:diamond_helmet": { + } +} diff --git a/src/main/resources/assets/viaproxy/data/item-identifiers-1.8.json b/src/main/resources/assets/viaproxy/data/item-identifiers-1.8.json new file mode 100644 index 00000000..7d9d63cd --- /dev/null +++ b/src/main/resources/assets/viaproxy/data/item-identifiers-1.8.json @@ -0,0 +1,47 @@ +{ + "minecraft:wooden_axe": 271, + "minecraft:stone_axe": 275, + "minecraft:iron_axe": 258, + "minecraft:golden_axe": 286, + "minecraft:diamond_axe": 279, + "minecraft:wooden_pickaxe": 270, + "minecraft:stone_pickaxe": 274, + "minecraft:iron_pickaxe": 257, + "minecraft:golden_pickaxe": 285, + "minecraft:diamond_pickaxe": 278, + "minecraft:wooden_shovel": 269, + "minecraft:stone_shovel": 273, + "minecraft:iron_shovel": 256, + "minecraft:golden_shovel": 284, + "minecraft:diamond_shovel": 277, + "minecraft:wooden_sword": 268, + "minecraft:stone_sword": 272, + "minecraft:iron_sword": 267, + "minecraft:golden_sword": 283, + "minecraft:diamond_sword": 276, + "minecraft:wooden_hoe": 290, + "minecraft:stone_hoe": 291, + "minecraft:iron_hoe": 292, + "minecraft:golden_hoe": 294, + "minecraft:diamond_hoe": 293, + "minecraft:leather_boots": 301, + "minecraft:leather_leggings": 300, + "minecraft:leather_chestplate": 299, + "minecraft:leather_helmet": 298, + "minecraft:chainmail_boots": 305, + "minecraft:chainmail_leggings": 304, + "minecraft:chainmail_chestplate": 303, + "minecraft:chainmail_helmet": 302, + "minecraft:iron_boots": 309, + "minecraft:iron_leggings": 308, + "minecraft:iron_chestplate": 307, + "minecraft:iron_helmet": 306, + "minecraft:golden_boots": 317, + "minecraft:golden_leggings": 316, + "minecraft:golden_chestplate": 315, + "minecraft:golden_helmet": 314, + "minecraft:diamond_boots": 313, + "minecraft:diamond_leggings": 312, + "minecraft:diamond_chestplate": 311, + "minecraft:diamond_helmet": 310 +} diff --git a/src/main/resources/assets/viaproxy/data/item-tool-components.json b/src/main/resources/assets/viaproxy/data/item-tool-components.json new file mode 100644 index 00000000..ca0d89f2 --- /dev/null +++ b/src/main/resources/assets/viaproxy/data/item-tool-components.json @@ -0,0 +1,3073 @@ +{ + "b1.8.1": [ + { + "item": "minecraft:wooden_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:bookshelf", + "minecraft:chest", + "minecraft:oak_planks", + "minecraft:oak_log" + ], + "speed": 2.0 + } + ] + }, + { + "item": "minecraft:stone_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:bookshelf", + "minecraft:chest", + "minecraft:oak_planks", + "minecraft:oak_log" + ], + "speed": 4.0 + } + ] + }, + { + "item": "minecraft:iron_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:bookshelf", + "minecraft:chest", + "minecraft:oak_planks", + "minecraft:oak_log" + ], + "speed": 6.0 + } + ] + }, + { + "item": "minecraft:golden_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:bookshelf", + "minecraft:chest", + "minecraft:oak_planks", + "minecraft:oak_log" + ], + "speed": 12.0 + } + ] + }, + { + "item": "minecraft:diamond_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:bookshelf", + "minecraft:chest", + "minecraft:oak_planks", + "minecraft:oak_log" + ], + "speed": 8.0 + } + ] + }, + { + "item": "minecraft:wooden_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:gold_ore", + "minecraft:diamond_ore", + "minecraft:stone", + "minecraft:iron_block", + "minecraft:netherrack", + "minecraft:iron_ore", + "minecraft:sandstone", + "minecraft:lapis_block", + "minecraft:ice", + "minecraft:gold_block", + "minecraft:mossy_cobblestone", + "minecraft:diamond_block", + "minecraft:petrified_oak_slab", + "minecraft:lapis_ore", + "minecraft:coal_ore", + "minecraft:smooth_stone_slab", + "minecraft:cobblestone", + "minecraft:sandstone_slab", + "minecraft:stone_brick_slab", + "minecraft:brick_slab", + "minecraft:cobblestone_slab" + ], + "speed": 2.0 + } + ] + }, + { + "item": "minecraft:stone_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:gold_ore", + "minecraft:diamond_ore", + "minecraft:stone", + "minecraft:iron_block", + "minecraft:netherrack", + "minecraft:iron_ore", + "minecraft:sandstone", + "minecraft:lapis_block", + "minecraft:ice", + "minecraft:gold_block", + "minecraft:mossy_cobblestone", + "minecraft:diamond_block", + "minecraft:petrified_oak_slab", + "minecraft:lapis_ore", + "minecraft:coal_ore", + "minecraft:smooth_stone_slab", + "minecraft:cobblestone", + "minecraft:sandstone_slab", + "minecraft:stone_brick_slab", + "minecraft:brick_slab", + "minecraft:cobblestone_slab" + ], + "speed": 4.0 + } + ] + }, + { + "item": "minecraft:iron_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:gold_ore", + "minecraft:diamond_ore", + "minecraft:stone", + "minecraft:iron_block", + "minecraft:netherrack", + "minecraft:iron_ore", + "minecraft:sandstone", + "minecraft:lapis_block", + "minecraft:ice", + "minecraft:gold_block", + "minecraft:mossy_cobblestone", + "minecraft:diamond_block", + "minecraft:petrified_oak_slab", + "minecraft:lapis_ore", + "minecraft:coal_ore", + "minecraft:smooth_stone_slab", + "minecraft:cobblestone", + "minecraft:sandstone_slab", + "minecraft:stone_brick_slab", + "minecraft:brick_slab", + "minecraft:cobblestone_slab" + ], + "speed": 6.0 + } + ] + }, + { + "item": "minecraft:golden_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:gold_ore", + "minecraft:diamond_ore", + "minecraft:stone", + "minecraft:iron_block", + "minecraft:netherrack", + "minecraft:iron_ore", + "minecraft:sandstone", + "minecraft:lapis_block", + "minecraft:ice", + "minecraft:gold_block", + "minecraft:mossy_cobblestone", + "minecraft:diamond_block", + "minecraft:petrified_oak_slab", + "minecraft:lapis_ore", + "minecraft:coal_ore", + "minecraft:smooth_stone_slab", + "minecraft:cobblestone", + "minecraft:sandstone_slab", + "minecraft:stone_brick_slab", + "minecraft:brick_slab", + "minecraft:cobblestone_slab" + ], + "speed": 12.0 + } + ] + }, + { + "item": "minecraft:diamond_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore", + "minecraft:obsidian", + "minecraft:crying_obsidian", + "minecraft:netherite_block", + "minecraft:ancient_debris", + "minecraft:respawn_anchor" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:gold_ore", + "minecraft:diamond_ore", + "minecraft:stone", + "minecraft:iron_block", + "minecraft:netherrack", + "minecraft:iron_ore", + "minecraft:sandstone", + "minecraft:lapis_block", + "minecraft:ice", + "minecraft:gold_block", + "minecraft:mossy_cobblestone", + "minecraft:diamond_block", + "minecraft:petrified_oak_slab", + "minecraft:lapis_ore", + "minecraft:coal_ore", + "minecraft:smooth_stone_slab", + "minecraft:cobblestone", + "minecraft:sandstone_slab", + "minecraft:stone_brick_slab", + "minecraft:brick_slab", + "minecraft:cobblestone_slab" + ], + "speed": 8.0 + } + ] + }, + { + "item": "minecraft:wooden_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:grass_block", + "minecraft:dirt", + "minecraft:clay" + ], + "speed": 2.0 + } + ] + }, + { + "item": "minecraft:stone_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:grass_block", + "minecraft:dirt", + "minecraft:clay" + ], + "speed": 4.0 + } + ] + }, + { + "item": "minecraft:iron_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:grass_block", + "minecraft:dirt", + "minecraft:clay" + ], + "speed": 6.0 + } + ] + }, + { + "item": "minecraft:golden_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:grass_block", + "minecraft:dirt", + "minecraft:clay" + ], + "speed": 12.0 + } + ] + }, + { + "item": "minecraft:diamond_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:grass_block", + "minecraft:dirt", + "minecraft:clay" + ], + "speed": 8.0 + } + ] + }, + { + "item": "minecraft:wooden_sword", + "default_mining_speed": 1.5, + "damage_per_block": 2, + "suitable_for": [ + "minecraft:cobweb" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:cobweb" + ], + "speed": 15.0 + } + ] + }, + { + "item": "minecraft:stone_sword", + "default_mining_speed": 1.5, + "damage_per_block": 2, + "suitable_for": [ + "minecraft:cobweb" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:cobweb" + ], + "speed": 15.0 + } + ] + }, + { + "item": "minecraft:iron_sword", + "default_mining_speed": 1.5, + "damage_per_block": 2, + "suitable_for": [ + "minecraft:cobweb" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:cobweb" + ], + "speed": 15.0 + } + ] + }, + { + "item": "minecraft:golden_sword", + "default_mining_speed": 1.5, + "damage_per_block": 2, + "suitable_for": [ + "minecraft:cobweb" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:cobweb" + ], + "speed": 15.0 + } + ] + }, + { + "item": "minecraft:diamond_sword", + "default_mining_speed": 1.5, + "damage_per_block": 2, + "suitable_for": [ + "minecraft:cobweb" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:cobweb" + ], + "speed": 15.0 + } + ] + }, + { + "item": "minecraft:shears", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:cobweb" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:white_wool", + "minecraft:pink_wool", + "minecraft:yellow_wool", + "minecraft:brown_wool", + "minecraft:blue_wool", + "minecraft:magenta_wool", + "minecraft:lime_wool", + "minecraft:gray_wool", + "minecraft:light_gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:purple_wool", + "minecraft:orange_wool", + "minecraft:red_wool", + "minecraft:black_wool", + "minecraft:cyan_wool" + ], + "speed": 5.0 + }, + { + "blocks": [ + "minecraft:birch_leaves", + "minecraft:oak_leaves", + "minecraft:cobweb", + "minecraft:spruce_leaves" + ], + "speed": 15.0 + } + ] + } + ], + "1.13.2": [ + { + "item": "minecraft:wooden_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 2.0 + } + ] + }, + { + "item": "minecraft:stone_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 4.0 + } + ] + }, + { + "item": "minecraft:iron_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 6.0 + } + ] + }, + { + "item": "minecraft:golden_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 12.0 + } + ] + }, + { + "item": "minecraft:diamond_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore", + "minecraft:obsidian", + "minecraft:crying_obsidian", + "minecraft:netherite_block", + "minecraft:ancient_debris", + "minecraft:respawn_anchor" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 8.0 + } + ] + } + ], + "1.15.2": [ + { + "item": "minecraft:wooden_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 2.0 + } + ] + }, + { + "item": "minecraft:stone_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 4.0 + } + ] + }, + { + "item": "minecraft:iron_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 6.0 + } + ] + }, + { + "item": "minecraft:golden_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 12.0 + } + ] + }, + { + "item": "minecraft:diamond_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore", + "minecraft:obsidian", + "minecraft:crying_obsidian", + "minecraft:netherite_block", + "minecraft:ancient_debris", + "minecraft:respawn_anchor" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box" + ], + "speed": 8.0 + } + ] + }, + { + "item": "minecraft:wooden_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [] + }, + { + "item": "minecraft:stone_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [] + }, + { + "item": "minecraft:iron_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [] + }, + { + "item": "minecraft:golden_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [] + }, + { + "item": "minecraft:diamond_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [] + } + ], + "1.16.4": [ + { + "item": "minecraft:wooden_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "#wood", + "#nether_wood", + "#plant", + "#replaceable_plant", + "#bamboo", + "#gourd", + "minecraft:ladder", + "minecraft:scaffolding", + "minecraft:oak_button", + "minecraft:spruce_button", + "minecraft:birch_button", + "minecraft:jungle_button", + "minecraft:dark_oak_button", + "minecraft:acacia_button", + "minecraft:crimson_button", + "minecraft:warped_button" + ], + "speed": 2.0 + } + ] + }, + { + "item": "minecraft:stone_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "#wood", + "#nether_wood", + "#plant", + "#replaceable_plant", + "#bamboo", + "#gourd", + "minecraft:ladder", + "minecraft:scaffolding", + "minecraft:oak_button", + "minecraft:spruce_button", + "minecraft:birch_button", + "minecraft:jungle_button", + "minecraft:dark_oak_button", + "minecraft:acacia_button", + "minecraft:crimson_button", + "minecraft:warped_button" + ], + "speed": 4.0 + } + ] + }, + { + "item": "minecraft:iron_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "#wood", + "#nether_wood", + "#plant", + "#replaceable_plant", + "#bamboo", + "#gourd", + "minecraft:ladder", + "minecraft:scaffolding", + "minecraft:oak_button", + "minecraft:spruce_button", + "minecraft:birch_button", + "minecraft:jungle_button", + "minecraft:dark_oak_button", + "minecraft:acacia_button", + "minecraft:crimson_button", + "minecraft:warped_button" + ], + "speed": 6.0 + } + ] + }, + { + "item": "minecraft:golden_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "#wood", + "#nether_wood", + "#plant", + "#replaceable_plant", + "#bamboo", + "#gourd", + "minecraft:ladder", + "minecraft:scaffolding", + "minecraft:oak_button", + "minecraft:spruce_button", + "minecraft:birch_button", + "minecraft:jungle_button", + "minecraft:dark_oak_button", + "minecraft:acacia_button", + "minecraft:crimson_button", + "minecraft:warped_button" + ], + "speed": 12.0 + } + ] + }, + { + "item": "minecraft:diamond_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "#wood", + "#nether_wood", + "#plant", + "#replaceable_plant", + "#bamboo", + "#gourd", + "minecraft:ladder", + "minecraft:scaffolding", + "minecraft:oak_button", + "minecraft:spruce_button", + "minecraft:birch_button", + "minecraft:jungle_button", + "minecraft:dark_oak_button", + "minecraft:acacia_button", + "minecraft:crimson_button", + "minecraft:warped_button" + ], + "speed": 8.0 + } + ] + }, + { + "item": "minecraft:netherite_axe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "#wood", + "#nether_wood", + "#plant", + "#replaceable_plant", + "#bamboo", + "#gourd", + "minecraft:ladder", + "minecraft:scaffolding", + "minecraft:oak_button", + "minecraft:spruce_button", + "minecraft:birch_button", + "minecraft:jungle_button", + "minecraft:dark_oak_button", + "minecraft:acacia_button", + "minecraft:crimson_button", + "minecraft:warped_button" + ], + "speed": 9.0 + } + ] + }, + { + "item": "minecraft:wooden_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:nether_gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box", + "minecraft:piston", + "minecraft:sticky_piston", + "minecraft:piston_head" + ], + "speed": 2.0 + } + ] + }, + { + "item": "minecraft:stone_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:nether_gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box", + "minecraft:piston", + "minecraft:sticky_piston", + "minecraft:piston_head" + ], + "speed": 4.0 + } + ] + }, + { + "item": "minecraft:iron_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:nether_gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box", + "minecraft:piston", + "minecraft:sticky_piston", + "minecraft:piston_head" + ], + "speed": 6.0 + } + ] + }, + { + "item": "minecraft:golden_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:nether_gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box", + "minecraft:piston", + "minecraft:sticky_piston", + "minecraft:piston_head" + ], + "speed": 12.0 + } + ] + }, + { + "item": "minecraft:diamond_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore", + "minecraft:obsidian", + "minecraft:crying_obsidian", + "minecraft:netherite_block", + "minecraft:ancient_debris", + "minecraft:respawn_anchor" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:nether_gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box", + "minecraft:piston", + "minecraft:sticky_piston", + "minecraft:piston_head" + ], + "speed": 8.0 + } + ] + }, + { + "item": "minecraft:netherite_pickaxe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:nether_gold_ore", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:emerald_block", + "minecraft:emerald_ore", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:redstone_ore", + "minecraft:obsidian", + "minecraft:crying_obsidian", + "minecraft:netherite_block", + "minecraft:ancient_debris", + "minecraft:respawn_anchor" + ], + "mining_speeds": [ + { + "blocks": [ + "#stone", + "#metal", + "#repair_station", + "minecraft:activator_rail", + "minecraft:coal_ore", + "minecraft:cobblestone", + "minecraft:detector_rail", + "minecraft:diamond_block", + "minecraft:diamond_ore", + "minecraft:powered_rail", + "minecraft:gold_block", + "minecraft:gold_ore", + "minecraft:nether_gold_ore", + "minecraft:ice", + "minecraft:iron_block", + "minecraft:iron_ore", + "minecraft:lapis_block", + "minecraft:lapis_ore", + "minecraft:mossy_cobblestone", + "minecraft:netherrack", + "minecraft:packed_ice", + "minecraft:blue_ice", + "minecraft:rail", + "minecraft:redstone_ore", + "minecraft:sandstone", + "minecraft:chiseled_sandstone", + "minecraft:cut_sandstone", + "minecraft:chiseled_red_sandstone", + "minecraft:cut_red_sandstone", + "minecraft:red_sandstone", + "minecraft:stone", + "minecraft:granite", + "minecraft:polished_granite", + "minecraft:diorite", + "minecraft:polished_diorite", + "minecraft:andesite", + "minecraft:polished_andesite", + "minecraft:stone_slab", + "minecraft:smooth_stone_slab", + "minecraft:sandstone_slab", + "minecraft:petrified_oak_slab", + "minecraft:cobblestone_slab", + "minecraft:brick_slab", + "minecraft:stone_brick_slab", + "minecraft:nether_brick_slab", + "minecraft:quartz_slab", + "minecraft:red_sandstone_slab", + "minecraft:purpur_slab", + "minecraft:smooth_quartz", + "minecraft:smooth_red_sandstone", + "minecraft:smooth_sandstone", + "minecraft:smooth_stone", + "minecraft:stone_button", + "minecraft:stone_pressure_plate", + "minecraft:polished_granite_slab", + "minecraft:smooth_red_sandstone_slab", + "minecraft:mossy_stone_brick_slab", + "minecraft:polished_diorite_slab", + "minecraft:mossy_cobblestone_slab", + "minecraft:end_stone_brick_slab", + "minecraft:smooth_sandstone_slab", + "minecraft:smooth_quartz_slab", + "minecraft:granite_slab", + "minecraft:andesite_slab", + "minecraft:red_nether_brick_slab", + "minecraft:polished_andesite_slab", + "minecraft:diorite_slab", + "minecraft:shulker_box", + "minecraft:black_shulker_box", + "minecraft:blue_shulker_box", + "minecraft:brown_shulker_box", + "minecraft:cyan_shulker_box", + "minecraft:gray_shulker_box", + "minecraft:green_shulker_box", + "minecraft:light_blue_shulker_box", + "minecraft:light_gray_shulker_box", + "minecraft:lime_shulker_box", + "minecraft:magenta_shulker_box", + "minecraft:orange_shulker_box", + "minecraft:pink_shulker_box", + "minecraft:purple_shulker_box", + "minecraft:red_shulker_box", + "minecraft:white_shulker_box", + "minecraft:yellow_shulker_box", + "minecraft:piston", + "minecraft:sticky_piston", + "minecraft:piston_head" + ], + "speed": 9.0 + } + ] + }, + { + "item": "minecraft:wooden_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sponge", + "minecraft:birch_leaves", + "minecraft:acacia_leaves", + "minecraft:dried_kelp_block", + "minecraft:target", + "minecraft:wet_sponge", + "minecraft:shroomlight", + "minecraft:jungle_leaves", + "minecraft:hay_block", + "minecraft:oak_leaves", + "minecraft:warped_wart_block", + "minecraft:dark_oak_leaves", + "minecraft:spruce_leaves", + "minecraft:nether_wart_block" + ], + "speed": 2.0 + } + ] + }, + { + "item": "minecraft:stone_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sponge", + "minecraft:birch_leaves", + "minecraft:acacia_leaves", + "minecraft:dried_kelp_block", + "minecraft:target", + "minecraft:wet_sponge", + "minecraft:shroomlight", + "minecraft:jungle_leaves", + "minecraft:hay_block", + "minecraft:oak_leaves", + "minecraft:warped_wart_block", + "minecraft:dark_oak_leaves", + "minecraft:spruce_leaves", + "minecraft:nether_wart_block" + ], + "speed": 4.0 + } + ] + }, + { + "item": "minecraft:iron_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sponge", + "minecraft:birch_leaves", + "minecraft:acacia_leaves", + "minecraft:dried_kelp_block", + "minecraft:target", + "minecraft:wet_sponge", + "minecraft:shroomlight", + "minecraft:jungle_leaves", + "minecraft:hay_block", + "minecraft:oak_leaves", + "minecraft:warped_wart_block", + "minecraft:dark_oak_leaves", + "minecraft:spruce_leaves", + "minecraft:nether_wart_block" + ], + "speed": 6.0 + } + ] + }, + { + "item": "minecraft:golden_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sponge", + "minecraft:birch_leaves", + "minecraft:acacia_leaves", + "minecraft:dried_kelp_block", + "minecraft:target", + "minecraft:wet_sponge", + "minecraft:shroomlight", + "minecraft:jungle_leaves", + "minecraft:hay_block", + "minecraft:oak_leaves", + "minecraft:warped_wart_block", + "minecraft:dark_oak_leaves", + "minecraft:spruce_leaves", + "minecraft:nether_wart_block" + ], + "speed": 12.0 + } + ] + }, + { + "item": "minecraft:diamond_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sponge", + "minecraft:birch_leaves", + "minecraft:acacia_leaves", + "minecraft:dried_kelp_block", + "minecraft:target", + "minecraft:wet_sponge", + "minecraft:shroomlight", + "minecraft:jungle_leaves", + "minecraft:hay_block", + "minecraft:oak_leaves", + "minecraft:warped_wart_block", + "minecraft:dark_oak_leaves", + "minecraft:spruce_leaves", + "minecraft:nether_wart_block" + ], + "speed": 8.0 + } + ] + }, + { + "item": "minecraft:netherite_hoe", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [], + "mining_speeds": [ + { + "blocks": [ + "minecraft:sponge", + "minecraft:birch_leaves", + "minecraft:acacia_leaves", + "minecraft:dried_kelp_block", + "minecraft:target", + "minecraft:wet_sponge", + "minecraft:shroomlight", + "minecraft:jungle_leaves", + "minecraft:hay_block", + "minecraft:oak_leaves", + "minecraft:warped_wart_block", + "minecraft:dark_oak_leaves", + "minecraft:spruce_leaves", + "minecraft:nether_wart_block" + ], + "speed": 9.0 + } + ] + }, + { + "item": "minecraft:wooden_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:grass_block", + "minecraft:blue_concrete_powder", + "minecraft:white_concrete_powder", + "minecraft:brown_concrete_powder", + "minecraft:orange_concrete_powder", + "minecraft:green_concrete_powder", + "minecraft:magenta_concrete_powder", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:soul_soil", + "minecraft:gray_concrete_powder", + "minecraft:podzol", + "minecraft:dirt_path", + "minecraft:light_blue_concrete_powder", + "minecraft:light_gray_concrete_powder", + "minecraft:mycelium", + "minecraft:red_sand", + "minecraft:soul_sand", + "minecraft:clay", + "minecraft:yellow_concrete_powder", + "minecraft:cyan_concrete_powder", + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:lime_concrete_powder", + "minecraft:coarse_dirt", + "minecraft:red_concrete_powder", + "minecraft:black_concrete_powder", + "minecraft:dirt", + "minecraft:purple_concrete_powder", + "minecraft:pink_concrete_powder" + ], + "speed": 2.0 + } + ] + }, + { + "item": "minecraft:stone_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:grass_block", + "minecraft:blue_concrete_powder", + "minecraft:white_concrete_powder", + "minecraft:brown_concrete_powder", + "minecraft:orange_concrete_powder", + "minecraft:green_concrete_powder", + "minecraft:magenta_concrete_powder", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:soul_soil", + "minecraft:gray_concrete_powder", + "minecraft:podzol", + "minecraft:dirt_path", + "minecraft:light_blue_concrete_powder", + "minecraft:light_gray_concrete_powder", + "minecraft:mycelium", + "minecraft:red_sand", + "minecraft:soul_sand", + "minecraft:clay", + "minecraft:yellow_concrete_powder", + "minecraft:cyan_concrete_powder", + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:lime_concrete_powder", + "minecraft:coarse_dirt", + "minecraft:red_concrete_powder", + "minecraft:black_concrete_powder", + "minecraft:dirt", + "minecraft:purple_concrete_powder", + "minecraft:pink_concrete_powder" + ], + "speed": 4.0 + } + ] + }, + { + "item": "minecraft:iron_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:grass_block", + "minecraft:blue_concrete_powder", + "minecraft:white_concrete_powder", + "minecraft:brown_concrete_powder", + "minecraft:orange_concrete_powder", + "minecraft:green_concrete_powder", + "minecraft:magenta_concrete_powder", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:soul_soil", + "minecraft:gray_concrete_powder", + "minecraft:podzol", + "minecraft:dirt_path", + "minecraft:light_blue_concrete_powder", + "minecraft:light_gray_concrete_powder", + "minecraft:mycelium", + "minecraft:red_sand", + "minecraft:soul_sand", + "minecraft:clay", + "minecraft:yellow_concrete_powder", + "minecraft:cyan_concrete_powder", + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:lime_concrete_powder", + "minecraft:coarse_dirt", + "minecraft:red_concrete_powder", + "minecraft:black_concrete_powder", + "minecraft:dirt", + "minecraft:purple_concrete_powder", + "minecraft:pink_concrete_powder" + ], + "speed": 6.0 + } + ] + }, + { + "item": "minecraft:golden_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:grass_block", + "minecraft:blue_concrete_powder", + "minecraft:white_concrete_powder", + "minecraft:brown_concrete_powder", + "minecraft:orange_concrete_powder", + "minecraft:green_concrete_powder", + "minecraft:magenta_concrete_powder", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:soul_soil", + "minecraft:gray_concrete_powder", + "minecraft:podzol", + "minecraft:dirt_path", + "minecraft:light_blue_concrete_powder", + "minecraft:light_gray_concrete_powder", + "minecraft:mycelium", + "minecraft:red_sand", + "minecraft:soul_sand", + "minecraft:clay", + "minecraft:yellow_concrete_powder", + "minecraft:cyan_concrete_powder", + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:lime_concrete_powder", + "minecraft:coarse_dirt", + "minecraft:red_concrete_powder", + "minecraft:black_concrete_powder", + "minecraft:dirt", + "minecraft:purple_concrete_powder", + "minecraft:pink_concrete_powder" + ], + "speed": 12.0 + } + ] + }, + { + "item": "minecraft:diamond_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:grass_block", + "minecraft:blue_concrete_powder", + "minecraft:white_concrete_powder", + "minecraft:brown_concrete_powder", + "minecraft:orange_concrete_powder", + "minecraft:green_concrete_powder", + "minecraft:magenta_concrete_powder", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:soul_soil", + "minecraft:gray_concrete_powder", + "minecraft:podzol", + "minecraft:dirt_path", + "minecraft:light_blue_concrete_powder", + "minecraft:light_gray_concrete_powder", + "minecraft:mycelium", + "minecraft:red_sand", + "minecraft:soul_sand", + "minecraft:clay", + "minecraft:yellow_concrete_powder", + "minecraft:cyan_concrete_powder", + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:lime_concrete_powder", + "minecraft:coarse_dirt", + "minecraft:red_concrete_powder", + "minecraft:black_concrete_powder", + "minecraft:dirt", + "minecraft:purple_concrete_powder", + "minecraft:pink_concrete_powder" + ], + "speed": 8.0 + } + ] + }, + { + "item": "minecraft:netherite_shovel", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:snow", + "minecraft:snow_block" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:grass_block", + "minecraft:blue_concrete_powder", + "minecraft:white_concrete_powder", + "minecraft:brown_concrete_powder", + "minecraft:orange_concrete_powder", + "minecraft:green_concrete_powder", + "minecraft:magenta_concrete_powder", + "minecraft:farmland", + "minecraft:snow_block", + "minecraft:soul_soil", + "minecraft:gray_concrete_powder", + "minecraft:podzol", + "minecraft:dirt_path", + "minecraft:light_blue_concrete_powder", + "minecraft:light_gray_concrete_powder", + "minecraft:mycelium", + "minecraft:red_sand", + "minecraft:soul_sand", + "minecraft:clay", + "minecraft:yellow_concrete_powder", + "minecraft:cyan_concrete_powder", + "minecraft:sand", + "minecraft:snow", + "minecraft:gravel", + "minecraft:lime_concrete_powder", + "minecraft:coarse_dirt", + "minecraft:red_concrete_powder", + "minecraft:black_concrete_powder", + "minecraft:dirt", + "minecraft:purple_concrete_powder", + "minecraft:pink_concrete_powder" + ], + "speed": 9.0 + } + ] + }, + { + "item": "minecraft:shears", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:redstone_wire", + "minecraft:tripwire", + "minecraft:cobweb" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:white_wool", + "minecraft:pink_wool", + "minecraft:yellow_wool", + "minecraft:brown_wool", + "minecraft:blue_wool", + "minecraft:magenta_wool", + "minecraft:lime_wool", + "minecraft:gray_wool", + "minecraft:light_gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:purple_wool", + "minecraft:orange_wool", + "minecraft:red_wool", + "minecraft:black_wool", + "minecraft:cyan_wool" + ], + "speed": 5.0 + }, + { + "blocks": [ + "minecraft:jungle_leaves", + "minecraft:birch_leaves", + "minecraft:acacia_leaves", + "minecraft:oak_leaves", + "minecraft:cobweb", + "minecraft:dark_oak_leaves", + "minecraft:spruce_leaves" + ], + "speed": 15.0 + } + ] + } + ], + "1.20.4": [ + { + "item": "minecraft:shears", + "default_mining_speed": 1.0, + "damage_per_block": 1, + "suitable_for": [ + "minecraft:redstone_wire", + "minecraft:tripwire", + "minecraft:cobweb" + ], + "mining_speeds": [ + { + "blocks": [ + "minecraft:vine", + "minecraft:glow_lichen" + ], + "speed": 2.0 + }, + { + "blocks": [ + "minecraft:white_wool", + "minecraft:pink_wool", + "minecraft:yellow_wool", + "minecraft:brown_wool", + "minecraft:blue_wool", + "minecraft:magenta_wool", + "minecraft:lime_wool", + "minecraft:gray_wool", + "minecraft:light_gray_wool", + "minecraft:green_wool", + "minecraft:light_blue_wool", + "minecraft:purple_wool", + "minecraft:orange_wool", + "minecraft:red_wool", + "minecraft:black_wool", + "minecraft:cyan_wool" + ], + "speed": 5.0 + }, + { + "blocks": [ + "minecraft:jungle_leaves", + "minecraft:flowering_azalea_leaves", + "minecraft:mangrove_leaves", + "minecraft:birch_leaves", + "minecraft:cherry_leaves", + "minecraft:azalea_leaves", + "minecraft:acacia_leaves", + "minecraft:oak_leaves", + "minecraft:cobweb", + "minecraft:dark_oak_leaves", + "minecraft:spruce_leaves" + ], + "speed": 15.0 + } + ] + } + ] +} diff --git a/src/main/resources/assets/viaproxy/data/materials-1.19.4.json b/src/main/resources/assets/viaproxy/data/materials-1.19.4.json new file mode 100644 index 00000000..eecd7756 --- /dev/null +++ b/src/main/resources/assets/viaproxy/data/materials-1.19.4.json @@ -0,0 +1,3417 @@ +{ + "materials": { + "air": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "structure_void": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "portal": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": false + }, + "carpet": { + "blocksMovement": false, + "burnable": true, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": false + }, + "plant": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": false + }, + "underwater_plant": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": false + }, + "replaceable_plant": { + "blocksMovement": false, + "burnable": true, + "liquid": false, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "nether_shoots": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "replaceable_underwater_plant": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "water": { + "blocksMovement": false, + "burnable": false, + "liquid": true, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "bubble_column": { + "blocksMovement": false, + "burnable": false, + "liquid": true, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "lava": { + "blocksMovement": false, + "burnable": false, + "liquid": true, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "snow_layer": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "fire": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": true, + "solid": false + }, + "decoration": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": false + }, + "cobweb": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": true + }, + "sculk": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "redstone_lamp": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "organic_product": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "soil": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "solid_organic": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "dense_ice": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "aggregate": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "sponge": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "shulker_box": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "wood": { + "blocksMovement": true, + "burnable": true, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "nether_wood": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "bamboo_sapling": { + "blocksMovement": false, + "burnable": true, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "bamboo": { + "blocksMovement": true, + "burnable": true, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "wool": { + "blocksMovement": true, + "burnable": true, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "tnt": { + "blocksMovement": true, + "burnable": true, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": true + }, + "leaves": { + "blocksMovement": true, + "burnable": true, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": true + }, + "glass": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": true + }, + "ice": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": true + }, + "cactus": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": true + }, + "stone": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "metal": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "snow_block": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "repair_station": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "barrier": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "piston": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "moss_block": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "gourd": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "egg": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "cake": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "amethyst": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "powder_snow": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": false + }, + "frogspawn": { + "blocksMovement": false, + "burnable": false, + "liquid": false, + "blocksLight": false, + "replaceable": false, + "solid": false + }, + "froglight": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + }, + "decorated_pot": { + "blocksMovement": true, + "burnable": false, + "liquid": false, + "blocksLight": true, + "replaceable": false, + "solid": true + } + }, + "blocks": { + "minecraft:spruce_trapdoor": { + "1.19.4": "wood" + }, + "minecraft:sculk_sensor": { + "1.19.4": "sculk" + }, + "minecraft:waxed_oxidized_cut_copper_slab": { + "1.19.4": "metal" + }, + "minecraft:tuff": { + "1.19.4": "stone" + }, + "minecraft:chorus_flower": { + "1.19.4": "plant" + }, + "minecraft:rooted_dirt": { + "1.19.4": "soil" + }, + "minecraft:end_stone": { + "1.19.4": "stone" + }, + "minecraft:chiseled_deepslate": { + "1.19.4": "stone" + }, + "minecraft:exposed_cut_copper_stairs": { + "1.19.4": "metal" + }, + "minecraft:deepslate_brick_slab": { + "1.19.4": "stone" + }, + "minecraft:cherry_leaves": { + "1.19.4": "leaves" + }, + "minecraft:cyan_bed": { + "1.19.4": "wool" + }, + "minecraft:sponge": { + "1.19.4": "sponge" + }, + "minecraft:lime_terracotta": { + "1.19.4": "stone" + }, + "minecraft:granite_wall": { + "1.19.4": "stone" + }, + "minecraft:white_tulip": { + "1.19.4": "plant" + }, + "minecraft:dispenser": { + "1.19.4": "stone" + }, + "minecraft:warped_fungus": { + "1.19.4": "plant" + }, + "minecraft:conduit": { + "1.19.4": "glass" + }, + "minecraft:mud_brick_wall": { + "1.19.4": "stone" + }, + "minecraft:green_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:smooth_quartz": { + "1.19.4": "stone" + }, + "minecraft:calcite": { + "1.19.4": "stone" + }, + "minecraft:peony": { + "1.19.4": "replaceable_plant" + }, + "minecraft:honeycomb_block": { + "1.19.4": "organic_product" + }, + "minecraft:blue_terracotta": { + "1.19.4": "stone" + }, + "minecraft:cherry_planks": { + "1.19.4": "wood" + }, + "minecraft:polished_andesite": { + "1.19.4": "stone" + }, + "minecraft:potatoes": { + "1.19.4": "plant" + }, + "minecraft:dark_oak_sapling": { + "1.19.4": "plant" + }, + "minecraft:stone_button": { + "1.19.4": "decoration" + }, + "minecraft:blast_furnace": { + "1.19.4": "stone" + }, + "minecraft:cracked_deepslate_tiles": { + "1.19.4": "stone" + }, + "minecraft:orange_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:cracked_nether_bricks": { + "1.19.4": "stone" + }, + "minecraft:melon_stem": { + "1.19.4": "plant" + }, + "minecraft:mangrove_wall_sign": { + "1.19.4": "wood" + }, + "minecraft:lever": { + "1.19.4": "decoration" + }, + "minecraft:gray_terracotta": { + "1.19.4": "stone" + }, + "minecraft:cartography_table": { + "1.19.4": "wood" + }, + "minecraft:mangrove_propagule": { + "1.19.4": "plant" + }, + "minecraft:gray_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:deepslate_iron_ore": { + "1.19.4": "stone" + }, + "minecraft:brick_slab": { + "1.19.4": "stone" + }, + "minecraft:birch_fence_gate": { + "1.19.4": "wood" + }, + "minecraft:nether_brick_wall": { + "1.19.4": "stone" + }, + "minecraft:vine": { + "1.19.4": "replaceable_plant" + }, + "minecraft:stripped_jungle_wood": { + "1.19.4": "wood" + }, + "minecraft:oak_leaves": { + "1.19.4": "leaves" + }, + "minecraft:wither_rose": { + "1.19.4": "plant" + }, + "minecraft:infested_cracked_stone_bricks": { + "1.19.4": "organic_product" + }, + "minecraft:mangrove_roots": { + "1.19.4": "wood" + }, + "minecraft:gray_wool": { + "1.19.4": "wool" + }, + "minecraft:stripped_oak_log": { + "1.19.4": "wood" + }, + "minecraft:red_sandstone_stairs": { + "1.19.4": "stone" + }, + "minecraft:bamboo_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:brain_coral_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:light_gray_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:black_banner": { + "1.19.4": "wood" + }, + "minecraft:pink_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:enchanting_table": { + "1.19.4": "stone" + }, + "minecraft:pearlescent_froglight": { + "1.19.4": "froglight" + }, + "minecraft:bamboo": { + "1.19.4": "bamboo" + }, + "minecraft:acacia_planks": { + "1.19.4": "wood" + }, + "minecraft:dead_brain_coral_wall_fan": { + "1.19.4": "stone" + }, + "minecraft:warped_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:potted_dead_bush": { + "1.19.4": "decoration" + }, + "minecraft:white_concrete": { + "1.19.4": "stone" + }, + "minecraft:birch_wood": { + "1.19.4": "wood" + }, + "minecraft:warped_stairs": { + "1.19.4": "nether_wood" + }, + "minecraft:purpur_block": { + "1.19.4": "stone" + }, + "minecraft:sandstone_wall": { + "1.19.4": "stone" + }, + "minecraft:powder_snow_cauldron": { + "1.19.4": "metal" + }, + "minecraft:polished_blackstone": { + "1.19.4": "stone" + }, + "minecraft:blue_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:infested_chiseled_stone_bricks": { + "1.19.4": "organic_product" + }, + "minecraft:deepslate_copper_ore": { + "1.19.4": "stone" + }, + "minecraft:pink_bed": { + "1.19.4": "wool" + }, + "minecraft:light_blue_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:purple_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:sea_lantern": { + "1.19.4": "glass" + }, + "minecraft:grass_block": { + "1.19.4": "solid_organic" + }, + "minecraft:pink_tulip": { + "1.19.4": "plant" + }, + "minecraft:birch_pressure_plate": { + "1.19.4": "wood" + }, + "minecraft:blue_orchid": { + "1.19.4": "plant" + }, + "minecraft:red_terracotta": { + "1.19.4": "stone" + }, + "minecraft:ancient_debris": { + "1.19.4": "metal" + }, + "minecraft:tinted_glass": { + "1.19.4": "glass" + }, + "minecraft:black_wool": { + "1.19.4": "wool" + }, + "minecraft:damaged_anvil": { + "1.19.4": "repair_station" + }, + "minecraft:coal_block": { + "1.19.4": "stone" + }, + "minecraft:yellow_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:piglin_head": { + "1.19.4": "decoration" + }, + "minecraft:light_gray_bed": { + "1.19.4": "wool" + }, + "minecraft:blue_bed": { + "1.19.4": "wool" + }, + "minecraft:infested_cobblestone": { + "1.19.4": "organic_product" + }, + "minecraft:potted_oak_sapling": { + "1.19.4": "decoration" + }, + "minecraft:deepslate_tile_stairs": { + "1.19.4": "stone" + }, + "minecraft:birch_fence": { + "1.19.4": "wood" + }, + "minecraft:bamboo_fence": { + "1.19.4": "wood" + }, + "minecraft:acacia_wall_sign": { + "1.19.4": "wood" + }, + "minecraft:snow_block": { + "1.19.4": "snow_block" + }, + "minecraft:copper_block": { + "1.19.4": "metal" + }, + "minecraft:mangrove_door": { + "1.19.4": "wood" + }, + "minecraft:cut_red_sandstone_slab": { + "1.19.4": "stone" + }, + "minecraft:honey_block": { + "1.19.4": "organic_product" + }, + "minecraft:lime_candle": { + "1.19.4": "decoration" + }, + "minecraft:brown_carpet": { + "1.19.4": "carpet" + }, + "minecraft:dragon_egg": { + "1.19.4": "egg" + }, + "minecraft:warped_fence": { + "1.19.4": "nether_wood" + }, + "minecraft:command_block": { + "1.19.4": "metal" + }, + "minecraft:light_blue_banner": { + "1.19.4": "wood" + }, + "minecraft:light_gray_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:potted_white_tulip": { + "1.19.4": "decoration" + }, + "minecraft:dandelion": { + "1.19.4": "plant" + }, + "minecraft:red_nether_bricks": { + "1.19.4": "stone" + }, + "minecraft:brick_wall": { + "1.19.4": "stone" + }, + "minecraft:redstone_torch": { + "1.19.4": "decoration" + }, + "minecraft:dragon_wall_head": { + "1.19.4": "decoration" + }, + "minecraft:soul_soil": { + "1.19.4": "soil" + }, + "minecraft:oak_sign": { + "1.19.4": "wood" + }, + "minecraft:red_nether_brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:bamboo_block": { + "1.19.4": "wood" + }, + "minecraft:stone_pressure_plate": { + "1.19.4": "stone" + }, + "minecraft:cobblestone_slab": { + "1.19.4": "stone" + }, + "minecraft:polished_diorite_stairs": { + "1.19.4": "stone" + }, + "minecraft:prismarine_brick_slab": { + "1.19.4": "stone" + }, + "minecraft:terracotta": { + "1.19.4": "stone" + }, + "minecraft:repeating_command_block": { + "1.19.4": "metal" + }, + "minecraft:cracked_deepslate_bricks": { + "1.19.4": "stone" + }, + "minecraft:barrier": { + "1.19.4": "barrier" + }, + "minecraft:jungle_wall_sign": { + "1.19.4": "wood" + }, + "minecraft:andesite_slab": { + "1.19.4": "stone" + }, + "minecraft:brown_banner": { + "1.19.4": "wood" + }, + "minecraft:cyan_wool": { + "1.19.4": "wool" + }, + "minecraft:purple_wool": { + "1.19.4": "wool" + }, + "minecraft:pink_carpet": { + "1.19.4": "carpet" + }, + "minecraft:brain_coral": { + "1.19.4": "underwater_plant" + }, + "minecraft:bamboo_mosaic_slab": { + "1.19.4": "wood" + }, + "minecraft:yellow_wool": { + "1.19.4": "wool" + }, + "minecraft:cobbled_deepslate_slab": { + "1.19.4": "stone" + }, + "minecraft:suspicious_sand": { + "1.19.4": "aggregate" + }, + "minecraft:potted_cherry_sapling": { + "1.19.4": "decoration" + }, + "minecraft:black_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:jungle_fence": { + "1.19.4": "wood" + }, + "minecraft:cave_vines_plant": { + "1.19.4": "plant" + }, + "minecraft:diorite": { + "1.19.4": "stone" + }, + "minecraft:jungle_button": { + "1.19.4": "decoration" + }, + "minecraft:blackstone_stairs": { + "1.19.4": "stone" + }, + "minecraft:brown_candle": { + "1.19.4": "decoration" + }, + "minecraft:waxed_exposed_copper": { + "1.19.4": "metal" + }, + "minecraft:crimson_door": { + "1.19.4": "nether_wood" + }, + "minecraft:redstone_lamp": { + "1.19.4": "redstone_lamp" + }, + "minecraft:crimson_button": { + "1.19.4": "decoration" + }, + "minecraft:muddy_mangrove_roots": { + "1.19.4": "soil" + }, + "minecraft:birch_sapling": { + "1.19.4": "plant" + }, + "minecraft:black_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:fire_coral_block": { + "1.19.4": "stone" + }, + "minecraft:jungle_stairs": { + "1.19.4": "wood" + }, + "minecraft:dark_oak_button": { + "1.19.4": "decoration" + }, + "minecraft:weeping_vines_plant": { + "1.19.4": "plant" + }, + "minecraft:cherry_wood": { + "1.19.4": "wood" + }, + "minecraft:oxeye_daisy": { + "1.19.4": "plant" + }, + "minecraft:lectern": { + "1.19.4": "wood" + }, + "minecraft:potted_crimson_fungus": { + "1.19.4": "decoration" + }, + "minecraft:chiseled_polished_blackstone": { + "1.19.4": "stone" + }, + "minecraft:spruce_door": { + "1.19.4": "wood" + }, + "minecraft:bamboo_mosaic_stairs": { + "1.19.4": "wood" + }, + "minecraft:white_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:lime_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:quartz_pillar": { + "1.19.4": "stone" + }, + "minecraft:mangrove_slab": { + "1.19.4": "wood" + }, + "minecraft:smooth_basalt": { + "1.19.4": "stone" + }, + "minecraft:lime_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:polished_blackstone_stairs": { + "1.19.4": "stone" + }, + "minecraft:kelp": { + "1.19.4": "underwater_plant" + }, + "minecraft:raw_copper_block": { + "1.19.4": "stone" + }, + "minecraft:acacia_fence": { + "1.19.4": "wood" + }, + "minecraft:orange_candle": { + "1.19.4": "decoration" + }, + "minecraft:powered_rail": { + "1.19.4": "decoration" + }, + "minecraft:anvil": { + "1.19.4": "repair_station" + }, + "minecraft:rose_bush": { + "1.19.4": "replaceable_plant" + }, + "minecraft:stone_brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:spruce_leaves": { + "1.19.4": "leaves" + }, + "minecraft:black_terracotta": { + "1.19.4": "stone" + }, + "minecraft:green_concrete": { + "1.19.4": "stone" + }, + "minecraft:fire": { + "1.19.4": "fire" + }, + "minecraft:lime_bed": { + "1.19.4": "wool" + }, + "minecraft:dark_prismarine": { + "1.19.4": "stone" + }, + "minecraft:jungle_wood": { + "1.19.4": "wood" + }, + "minecraft:light_gray_banner": { + "1.19.4": "wood" + }, + "minecraft:dark_oak_leaves": { + "1.19.4": "leaves" + }, + "minecraft:potted_cactus": { + "1.19.4": "decoration" + }, + "minecraft:acacia_button": { + "1.19.4": "decoration" + }, + "minecraft:rail": { + "1.19.4": "decoration" + }, + "minecraft:dark_prismarine_stairs": { + "1.19.4": "stone" + }, + "minecraft:light_blue_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:mud": { + "1.19.4": "soil" + }, + "minecraft:daylight_detector": { + "1.19.4": "wood" + }, + "minecraft:dead_tube_coral_wall_fan": { + "1.19.4": "stone" + }, + "minecraft:acacia_leaves": { + "1.19.4": "leaves" + }, + "minecraft:cyan_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:waxed_exposed_cut_copper_slab": { + "1.19.4": "metal" + }, + "minecraft:spruce_fence_gate": { + "1.19.4": "wood" + }, + "minecraft:dark_oak_wall_sign": { + "1.19.4": "wood" + }, + "minecraft:mangrove_button": { + "1.19.4": "decoration" + }, + "minecraft:brown_concrete": { + "1.19.4": "stone" + }, + "minecraft:trapped_chest": { + "1.19.4": "wood" + }, + "minecraft:red_carpet": { + "1.19.4": "carpet" + }, + "minecraft:birch_sign": { + "1.19.4": "wood" + }, + "minecraft:birch_stairs": { + "1.19.4": "wood" + }, + "minecraft:dead_horn_coral": { + "1.19.4": "stone" + }, + "minecraft:crimson_roots": { + "1.19.4": "nether_shoots" + }, + "minecraft:deepslate_tile_wall": { + "1.19.4": "stone" + }, + "minecraft:brewing_stand": { + "1.19.4": "metal" + }, + "minecraft:chain_command_block": { + "1.19.4": "metal" + }, + "minecraft:black_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:pink_candle": { + "1.19.4": "decoration" + }, + "minecraft:white_carpet": { + "1.19.4": "carpet" + }, + "minecraft:crimson_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:light_blue_carpet": { + "1.19.4": "carpet" + }, + "minecraft:sandstone_slab": { + "1.19.4": "stone" + }, + "minecraft:dark_oak_fence": { + "1.19.4": "wood" + }, + "minecraft:podzol": { + "1.19.4": "soil" + }, + "minecraft:crimson_wall_sign": { + "1.19.4": "nether_wood" + }, + "minecraft:brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:blackstone_wall": { + "1.19.4": "stone" + }, + "minecraft:light_blue_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:potted_blue_orchid": { + "1.19.4": "decoration" + }, + "minecraft:zombie_head": { + "1.19.4": "decoration" + }, + "minecraft:orange_carpet": { + "1.19.4": "carpet" + }, + "minecraft:crimson_fungus": { + "1.19.4": "plant" + }, + "minecraft:lightning_rod": { + "1.19.4": "metal" + }, + "minecraft:farmland": { + "1.19.4": "soil" + }, + "minecraft:stone_bricks": { + "1.19.4": "stone" + }, + "minecraft:fletching_table": { + "1.19.4": "wood" + }, + "minecraft:candle": { + "1.19.4": "decoration" + }, + "minecraft:pink_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:dark_oak_wood": { + "1.19.4": "wood" + }, + "minecraft:potted_red_mushroom": { + "1.19.4": "decoration" + }, + "minecraft:potted_spruce_sapling": { + "1.19.4": "decoration" + }, + "minecraft:red_sandstone": { + "1.19.4": "stone" + }, + "minecraft:polished_blackstone_bricks": { + "1.19.4": "stone" + }, + "minecraft:white_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:red_nether_brick_wall": { + "1.19.4": "stone" + }, + "minecraft:oak_fence": { + "1.19.4": "wood" + }, + "minecraft:dead_bubble_coral_block": { + "1.19.4": "stone" + }, + "minecraft:bubble_coral_block": { + "1.19.4": "stone" + }, + "minecraft:cobblestone_stairs": { + "1.19.4": "stone" + }, + "minecraft:brown_bed": { + "1.19.4": "wool" + }, + "minecraft:raw_gold_block": { + "1.19.4": "stone" + }, + "minecraft:acacia_sign": { + "1.19.4": "wood" + }, + "minecraft:oak_fence_gate": { + "1.19.4": "wood" + }, + "minecraft:black_bed": { + "1.19.4": "wool" + }, + "minecraft:sugar_cane": { + "1.19.4": "plant" + }, + "minecraft:potted_oxeye_daisy": { + "1.19.4": "decoration" + }, + "minecraft:diorite_stairs": { + "1.19.4": "stone" + }, + "minecraft:allium": { + "1.19.4": "plant" + }, + "minecraft:birch_button": { + "1.19.4": "decoration" + }, + "minecraft:carved_pumpkin": { + "1.19.4": "gourd" + }, + "minecraft:granite_stairs": { + "1.19.4": "stone" + }, + "minecraft:horn_coral": { + "1.19.4": "underwater_plant" + }, + "minecraft:yellow_terracotta": { + "1.19.4": "stone" + }, + "minecraft:birch_wall_hanging_sign": { + "1.19.4": "aggregate" + }, + "minecraft:iron_door": { + "1.19.4": "metal" + }, + "minecraft:purpur_pillar": { + "1.19.4": "stone" + }, + "minecraft:stone_slab": { + "1.19.4": "stone" + }, + "minecraft:deepslate_bricks": { + "1.19.4": "stone" + }, + "minecraft:nether_wart": { + "1.19.4": "plant" + }, + "minecraft:warped_fence_gate": { + "1.19.4": "nether_wood" + }, + "minecraft:acacia_sapling": { + "1.19.4": "plant" + }, + "minecraft:potted_poppy": { + "1.19.4": "decoration" + }, + "minecraft:light_blue_candle": { + "1.19.4": "decoration" + }, + "minecraft:oak_sapling": { + "1.19.4": "plant" + }, + "minecraft:pink_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:birch_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:nether_brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:purple_terracotta": { + "1.19.4": "stone" + }, + "minecraft:mossy_stone_brick_slab": { + "1.19.4": "stone" + }, + "minecraft:blue_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:mangrove_fence_gate": { + "1.19.4": "wood" + }, + "minecraft:polished_deepslate": { + "1.19.4": "stone" + }, + "minecraft:stripped_birch_wood": { + "1.19.4": "wood" + }, + "minecraft:cherry_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:magenta_banner": { + "1.19.4": "wood" + }, + "minecraft:magenta_candle": { + "1.19.4": "decoration" + }, + "minecraft:pink_petals": { + "1.19.4": "plant" + }, + "minecraft:acacia_wood": { + "1.19.4": "wood" + }, + "minecraft:cobweb": { + "1.19.4": "cobweb" + }, + "minecraft:magenta_concrete": { + "1.19.4": "stone" + }, + "minecraft:oxidized_cut_copper_slab": { + "1.19.4": "metal" + }, + "minecraft:tube_coral": { + "1.19.4": "underwater_plant" + }, + "minecraft:mangrove_sign": { + "1.19.4": "wood" + }, + "minecraft:soul_torch": { + "1.19.4": "decoration" + }, + "minecraft:lava_cauldron": { + "1.19.4": "metal" + }, + "minecraft:yellow_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:red_wool": { + "1.19.4": "wool" + }, + "minecraft:tnt": { + "1.19.4": "tnt" + }, + "minecraft:prismarine_bricks": { + "1.19.4": "stone" + }, + "minecraft:tube_coral_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:light_gray_wool": { + "1.19.4": "wool" + }, + "minecraft:sweet_berry_bush": { + "1.19.4": "plant" + }, + "minecraft:magenta_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:gray_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:birch_slab": { + "1.19.4": "wood" + }, + "minecraft:dropper": { + "1.19.4": "stone" + }, + "minecraft:cave_air": { + "1.19.4": "air" + }, + "minecraft:dark_oak_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:glass_pane": { + "1.19.4": "glass" + }, + "minecraft:mangrove_leaves": { + "1.19.4": "leaves" + }, + "minecraft:sandstone_stairs": { + "1.19.4": "stone" + }, + "minecraft:weathered_cut_copper_stairs": { + "1.19.4": "metal" + }, + "minecraft:glowstone": { + "1.19.4": "glass" + }, + "minecraft:mangrove_trapdoor": { + "1.19.4": "wood" + }, + "minecraft:brown_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:exposed_cut_copper": { + "1.19.4": "metal" + }, + "minecraft:stripped_dark_oak_wood": { + "1.19.4": "wood" + }, + "minecraft:weeping_vines": { + "1.19.4": "plant" + }, + "minecraft:warped_button": { + "1.19.4": "decoration" + }, + "minecraft:iron_trapdoor": { + "1.19.4": "metal" + }, + "minecraft:red_mushroom_block": { + "1.19.4": "wood" + }, + "minecraft:loom": { + "1.19.4": "wood" + }, + "minecraft:brown_terracotta": { + "1.19.4": "stone" + }, + "minecraft:potted_azure_bluet": { + "1.19.4": "decoration" + }, + "minecraft:stripped_cherry_wood": { + "1.19.4": "wood" + }, + "minecraft:blue_concrete": { + "1.19.4": "stone" + }, + "minecraft:dark_oak_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:pink_concrete": { + "1.19.4": "stone" + }, + "minecraft:smooth_quartz_stairs": { + "1.19.4": "stone" + }, + "minecraft:polished_granite": { + "1.19.4": "stone" + }, + "minecraft:acacia_pressure_plate": { + "1.19.4": "wood" + }, + "minecraft:green_candle": { + "1.19.4": "decoration" + }, + "minecraft:medium_amethyst_bud": { + "1.19.4": "amethyst" + }, + "minecraft:gray_banner": { + "1.19.4": "wood" + }, + "minecraft:crimson_nylium": { + "1.19.4": "stone" + }, + "minecraft:spruce_planks": { + "1.19.4": "wood" + }, + "minecraft:polished_blackstone_brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:red_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:blue_wool": { + "1.19.4": "wool" + }, + "minecraft:creeper_wall_head": { + "1.19.4": "decoration" + }, + "minecraft:red_tulip": { + "1.19.4": "plant" + }, + "minecraft:blue_ice": { + "1.19.4": "dense_ice" + }, + "minecraft:warped_sign": { + "1.19.4": "nether_wood" + }, + "minecraft:player_wall_head": { + "1.19.4": "decoration" + }, + "minecraft:lapis_block": { + "1.19.4": "metal" + }, + "minecraft:white_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:orange_terracotta": { + "1.19.4": "stone" + }, + "minecraft:potted_warped_fungus": { + "1.19.4": "decoration" + }, + "minecraft:mangrove_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:oak_wood": { + "1.19.4": "wood" + }, + "minecraft:sunflower": { + "1.19.4": "replaceable_plant" + }, + "minecraft:dragon_head": { + "1.19.4": "decoration" + }, + "minecraft:fire_coral": { + "1.19.4": "underwater_plant" + }, + "minecraft:waxed_copper_block": { + "1.19.4": "metal" + }, + "minecraft:oak_button": { + "1.19.4": "decoration" + }, + "minecraft:white_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:light_blue_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:red_bed": { + "1.19.4": "wool" + }, + "minecraft:potted_azalea_bush": { + "1.19.4": "decoration" + }, + "minecraft:birch_planks": { + "1.19.4": "wood" + }, + "minecraft:spruce_wood": { + "1.19.4": "wood" + }, + "minecraft:light_gray_terracotta": { + "1.19.4": "stone" + }, + "minecraft:skeleton_wall_skull": { + "1.19.4": "decoration" + }, + "minecraft:clay": { + "1.19.4": "organic_product" + }, + "minecraft:deepslate_redstone_ore": { + "1.19.4": "stone" + }, + "minecraft:activator_rail": { + "1.19.4": "decoration" + }, + "minecraft:red_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:potted_fern": { + "1.19.4": "decoration" + }, + "minecraft:blue_candle": { + "1.19.4": "decoration" + }, + "minecraft:bell": { + "1.19.4": "metal" + }, + "minecraft:potted_jungle_sapling": { + "1.19.4": "decoration" + }, + "minecraft:smoker": { + "1.19.4": "stone" + }, + "minecraft:polished_deepslate_wall": { + "1.19.4": "stone" + }, + "minecraft:chiseled_bookshelf": { + "1.19.4": "wood" + }, + "minecraft:lime_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:polished_basalt": { + "1.19.4": "stone" + }, + "minecraft:bamboo_trapdoor": { + "1.19.4": "wood" + }, + "minecraft:blue_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:waxed_weathered_copper": { + "1.19.4": "metal" + }, + "minecraft:spruce_button": { + "1.19.4": "decoration" + }, + "minecraft:dark_prismarine_slab": { + "1.19.4": "stone" + }, + "minecraft:note_block": { + "1.19.4": "wood" + }, + "minecraft:jungle_trapdoor": { + "1.19.4": "wood" + }, + "minecraft:potted_crimson_roots": { + "1.19.4": "decoration" + }, + "minecraft:blue_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:sculk_catalyst": { + "1.19.4": "sculk" + }, + "minecraft:gravel": { + "1.19.4": "aggregate" + }, + "minecraft:dark_oak_fence_gate": { + "1.19.4": "wood" + }, + "minecraft:blue_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:beetroots": { + "1.19.4": "plant" + }, + "minecraft:player_head": { + "1.19.4": "decoration" + }, + "minecraft:cake": { + "1.19.4": "cake" + }, + "minecraft:wither_skeleton_skull": { + "1.19.4": "decoration" + }, + "minecraft:orange_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:sculk_shrieker": { + "1.19.4": "sculk" + }, + "minecraft:petrified_oak_slab": { + "1.19.4": "stone" + }, + "minecraft:cut_sandstone": { + "1.19.4": "stone" + }, + "minecraft:warped_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:azalea": { + "1.19.4": "plant" + }, + "minecraft:deepslate": { + "1.19.4": "stone" + }, + "minecraft:waxed_exposed_cut_copper": { + "1.19.4": "metal" + }, + "minecraft:gray_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:green_carpet": { + "1.19.4": "carpet" + }, + "minecraft:gray_candle": { + "1.19.4": "decoration" + }, + "minecraft:sticky_piston": { + "1.19.4": "piston" + }, + "minecraft:oak_stairs": { + "1.19.4": "wood" + }, + "minecraft:green_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:cyan_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:mossy_stone_brick_wall": { + "1.19.4": "stone" + }, + "minecraft:jungle_pressure_plate": { + "1.19.4": "wood" + }, + "minecraft:stone": { + "1.19.4": "stone" + }, + "minecraft:crimson_hyphae": { + "1.19.4": "nether_wood" + }, + "minecraft:gray_bed": { + "1.19.4": "wool" + }, + "minecraft:white_terracotta": { + "1.19.4": "stone" + }, + "minecraft:bookshelf": { + "1.19.4": "wood" + }, + "minecraft:crimson_stairs": { + "1.19.4": "nether_wood" + }, + "minecraft:light_gray_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:gilded_blackstone": { + "1.19.4": "stone" + }, + "minecraft:polished_blackstone_wall": { + "1.19.4": "stone" + }, + "minecraft:waxed_weathered_cut_copper": { + "1.19.4": "metal" + }, + "minecraft:stripped_mangrove_wood": { + "1.19.4": "wood" + }, + "minecraft:magenta_wool": { + "1.19.4": "wool" + }, + "minecraft:polished_granite_slab": { + "1.19.4": "stone" + }, + "minecraft:exposed_cut_copper_slab": { + "1.19.4": "metal" + }, + "minecraft:mangrove_log": { + "1.19.4": "wood" + }, + "minecraft:lodestone": { + "1.19.4": "repair_station" + }, + "minecraft:horn_coral_wall_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:spruce_wall_sign": { + "1.19.4": "wood" + }, + "minecraft:magenta_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:dead_horn_coral_wall_fan": { + "1.19.4": "stone" + }, + "minecraft:brown_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:jungle_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:redstone_wall_torch": { + "1.19.4": "decoration" + }, + "minecraft:magenta_bed": { + "1.19.4": "wool" + }, + "minecraft:brown_mushroom": { + "1.19.4": "plant" + }, + "minecraft:horn_coral_block": { + "1.19.4": "stone" + }, + "minecraft:cherry_sapling": { + "1.19.4": "plant" + }, + "minecraft:blue_banner": { + "1.19.4": "wood" + }, + "minecraft:slime_block": { + "1.19.4": "organic_product" + }, + "minecraft:bamboo_sapling": { + "1.19.4": "bamboo_sapling" + }, + "minecraft:tube_coral_block": { + "1.19.4": "stone" + }, + "minecraft:birch_leaves": { + "1.19.4": "leaves" + }, + "minecraft:andesite_stairs": { + "1.19.4": "stone" + }, + "minecraft:cherry_door": { + "1.19.4": "wood" + }, + "minecraft:purple_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:crimson_stem": { + "1.19.4": "nether_wood" + }, + "minecraft:infested_deepslate": { + "1.19.4": "organic_product" + }, + "minecraft:deepslate_tiles": { + "1.19.4": "stone" + }, + "minecraft:iron_block": { + "1.19.4": "metal" + }, + "minecraft:prismarine_slab": { + "1.19.4": "stone" + }, + "minecraft:gray_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:green_terracotta": { + "1.19.4": "stone" + }, + "minecraft:dead_fire_coral_block": { + "1.19.4": "stone" + }, + "minecraft:cherry_button": { + "1.19.4": "decoration" + }, + "minecraft:waxed_oxidized_copper": { + "1.19.4": "metal" + }, + "minecraft:waxed_weathered_cut_copper_stairs": { + "1.19.4": "metal" + }, + "minecraft:mangrove_pressure_plate": { + "1.19.4": "wood" + }, + "minecraft:warped_wall_sign": { + "1.19.4": "nether_wood" + }, + "minecraft:warped_wart_block": { + "1.19.4": "solid_organic" + }, + "minecraft:spore_blossom": { + "1.19.4": "plant" + }, + "minecraft:diamond_ore": { + "1.19.4": "stone" + }, + "minecraft:melon": { + "1.19.4": "gourd" + }, + "minecraft:yellow_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:cherry_trapdoor": { + "1.19.4": "wood" + }, + "minecraft:weathered_cut_copper": { + "1.19.4": "metal" + }, + "minecraft:warped_door": { + "1.19.4": "nether_wood" + }, + "minecraft:stripped_spruce_log": { + "1.19.4": "wood" + }, + "minecraft:lime_concrete": { + "1.19.4": "stone" + }, + "minecraft:target": { + "1.19.4": "solid_organic" + }, + "minecraft:end_stone_brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:light_blue_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:torch": { + "1.19.4": "decoration" + }, + "minecraft:yellow_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:yellow_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:composter": { + "1.19.4": "wood" + }, + "minecraft:gray_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:birch_trapdoor": { + "1.19.4": "wood" + }, + "minecraft:pink_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:crimson_sign": { + "1.19.4": "nether_wood" + }, + "minecraft:stripped_mangrove_log": { + "1.19.4": "wood" + }, + "minecraft:quartz_block": { + "1.19.4": "stone" + }, + "minecraft:dark_oak_door": { + "1.19.4": "wood" + }, + "minecraft:lime_wool": { + "1.19.4": "wool" + }, + "minecraft:jungle_leaves": { + "1.19.4": "leaves" + }, + "minecraft:small_amethyst_bud": { + "1.19.4": "amethyst" + }, + "minecraft:spawner": { + "1.19.4": "stone" + }, + "minecraft:potted_lily_of_the_valley": { + "1.19.4": "decoration" + }, + "minecraft:spruce_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:green_wool": { + "1.19.4": "wool" + }, + "minecraft:oak_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:spruce_log": { + "1.19.4": "wood" + }, + "minecraft:bamboo_fence_gate": { + "1.19.4": "wood" + }, + "minecraft:end_rod": { + "1.19.4": "decoration" + }, + "minecraft:jungle_fence_gate": { + "1.19.4": "wood" + }, + "minecraft:comparator": { + "1.19.4": "decoration" + }, + "minecraft:deepslate_brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:white_bed": { + "1.19.4": "wool" + }, + "minecraft:bamboo_slab": { + "1.19.4": "wood" + }, + "minecraft:green_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:barrel": { + "1.19.4": "wood" + }, + "minecraft:soul_fire": { + "1.19.4": "fire" + }, + "minecraft:oak_planks": { + "1.19.4": "wood" + }, + "minecraft:potted_cornflower": { + "1.19.4": "decoration" + }, + "minecraft:bubble_coral_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:piston_head": { + "1.19.4": "piston" + }, + "minecraft:warped_planks": { + "1.19.4": "nether_wood" + }, + "minecraft:furnace": { + "1.19.4": "stone" + }, + "minecraft:red_sandstone_wall": { + "1.19.4": "stone" + }, + "minecraft:stripped_crimson_stem": { + "1.19.4": "nether_wood" + }, + "minecraft:netherrack": { + "1.19.4": "stone" + }, + "minecraft:dead_fire_coral_fan": { + "1.19.4": "stone" + }, + "minecraft:crafting_table": { + "1.19.4": "wood" + }, + "minecraft:ochre_froglight": { + "1.19.4": "froglight" + }, + "minecraft:acacia_fence_gate": { + "1.19.4": "wood" + }, + "minecraft:acacia_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:lilac": { + "1.19.4": "replaceable_plant" + }, + "minecraft:cherry_stairs": { + "1.19.4": "wood" + }, + "minecraft:lime_carpet": { + "1.19.4": "carpet" + }, + "minecraft:purple_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:small_dripleaf": { + "1.19.4": "plant" + }, + "minecraft:light_gray_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:light_gray_carpet": { + "1.19.4": "carpet" + }, + "minecraft:gray_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:red_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:candle_cake": { + "1.19.4": "cake" + }, + "minecraft:bubble_coral_wall_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:polished_deepslate_slab": { + "1.19.4": "stone" + }, + "minecraft:jungle_planks": { + "1.19.4": "wood" + }, + "minecraft:jungle_door": { + "1.19.4": "wood" + }, + "minecraft:void_air": { + "1.19.4": "air" + }, + "minecraft:iron_ore": { + "1.19.4": "stone" + }, + "minecraft:light_weighted_pressure_plate": { + "1.19.4": "metal" + }, + "minecraft:cyan_carpet": { + "1.19.4": "carpet" + }, + "minecraft:light_blue_terracotta": { + "1.19.4": "stone" + }, + "minecraft:purple_carpet": { + "1.19.4": "carpet" + }, + "minecraft:warped_trapdoor": { + "1.19.4": "nether_wood" + }, + "minecraft:cherry_sign": { + "1.19.4": "wood" + }, + "minecraft:weathered_copper": { + "1.19.4": "metal" + }, + "minecraft:glow_lichen": { + "1.19.4": "replaceable_plant" + }, + "minecraft:blue_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:redstone_block": { + "1.19.4": "metal" + }, + "minecraft:cracked_stone_bricks": { + "1.19.4": "stone" + }, + "minecraft:mossy_cobblestone_wall": { + "1.19.4": "stone" + }, + "minecraft:magenta_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:polished_blackstone_slab": { + "1.19.4": "stone" + }, + "minecraft:cornflower": { + "1.19.4": "plant" + }, + "minecraft:yellow_banner": { + "1.19.4": "wood" + }, + "minecraft:mossy_cobblestone": { + "1.19.4": "stone" + }, + "minecraft:azalea_leaves": { + "1.19.4": "leaves" + }, + "minecraft:blue_carpet": { + "1.19.4": "carpet" + }, + "minecraft:dead_tube_coral": { + "1.19.4": "stone" + }, + "minecraft:flowering_azalea_leaves": { + "1.19.4": "leaves" + }, + "minecraft:infested_stone_bricks": { + "1.19.4": "organic_product" + }, + "minecraft:mossy_cobblestone_stairs": { + "1.19.4": "stone" + }, + "minecraft:blue_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:red_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:jungle_slab": { + "1.19.4": "wood" + }, + "minecraft:bamboo_wall_sign": { + "1.19.4": "wood" + }, + "minecraft:smithing_table": { + "1.19.4": "wood" + }, + "minecraft:redstone_wire": { + "1.19.4": "decoration" + }, + "minecraft:dried_kelp_block": { + "1.19.4": "solid_organic" + }, + "minecraft:warped_slab": { + "1.19.4": "nether_wood" + }, + "minecraft:warped_hyphae": { + "1.19.4": "nether_wood" + }, + "minecraft:chest": { + "1.19.4": "wood" + }, + "minecraft:warped_nylium": { + "1.19.4": "stone" + }, + "minecraft:cyan_terracotta": { + "1.19.4": "stone" + }, + "minecraft:dead_horn_coral_fan": { + "1.19.4": "stone" + }, + "minecraft:blackstone": { + "1.19.4": "stone" + }, + "minecraft:stripped_acacia_log": { + "1.19.4": "wood" + }, + "minecraft:oak_slab": { + "1.19.4": "wood" + }, + "minecraft:cut_copper": { + "1.19.4": "metal" + }, + "minecraft:moving_piston": { + "1.19.4": "piston" + }, + "minecraft:bubble_column": { + "1.19.4": "bubble_column" + }, + "minecraft:crimson_trapdoor": { + "1.19.4": "nether_wood" + }, + "minecraft:polished_blackstone_brick_slab": { + "1.19.4": "stone" + }, + "minecraft:granite": { + "1.19.4": "stone" + }, + "minecraft:deepslate_lapis_ore": { + "1.19.4": "stone" + }, + "minecraft:oak_door": { + "1.19.4": "wood" + }, + "minecraft:smooth_red_sandstone_stairs": { + "1.19.4": "stone" + }, + "minecraft:cobbled_deepslate_stairs": { + "1.19.4": "stone" + }, + "minecraft:polished_andesite_stairs": { + "1.19.4": "stone" + }, + "minecraft:gray_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:waxed_oxidized_cut_copper": { + "1.19.4": "metal" + }, + "minecraft:sandstone": { + "1.19.4": "stone" + }, + "minecraft:pink_banner": { + "1.19.4": "wood" + }, + "minecraft:dead_brain_coral_block": { + "1.19.4": "stone" + }, + "minecraft:chipped_anvil": { + "1.19.4": "repair_station" + }, + "minecraft:red_sandstone_slab": { + "1.19.4": "stone" + }, + "minecraft:prismarine": { + "1.19.4": "stone" + }, + "minecraft:cocoa": { + "1.19.4": "plant" + }, + "minecraft:spruce_slab": { + "1.19.4": "wood" + }, + "minecraft:deepslate_emerald_ore": { + "1.19.4": "stone" + }, + "minecraft:tall_seagrass": { + "1.19.4": "replaceable_underwater_plant" + }, + "minecraft:soul_lantern": { + "1.19.4": "metal" + }, + "minecraft:lava": { + "1.19.4": "lava" + }, + "minecraft:green_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:chain": { + "1.19.4": "metal" + }, + "minecraft:cauldron": { + "1.19.4": "metal" + }, + "minecraft:raw_iron_block": { + "1.19.4": "stone" + }, + "minecraft:cherry_wall_sign": { + "1.19.4": "wood" + }, + "minecraft:mangrove_fence": { + "1.19.4": "wood" + }, + "minecraft:waxed_cut_copper": { + "1.19.4": "metal" + }, + "minecraft:big_dripleaf_stem": { + "1.19.4": "plant" + }, + "minecraft:fire_coral_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:cactus": { + "1.19.4": "cactus" + }, + "minecraft:pink_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:nether_gold_ore": { + "1.19.4": "stone" + }, + "minecraft:black_concrete": { + "1.19.4": "stone" + }, + "minecraft:potted_pink_tulip": { + "1.19.4": "decoration" + }, + "minecraft:deepslate_diamond_ore": { + "1.19.4": "stone" + }, + "minecraft:orange_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:red_nether_brick_slab": { + "1.19.4": "stone" + }, + "minecraft:quartz_bricks": { + "1.19.4": "stone" + }, + "minecraft:green_banner": { + "1.19.4": "wood" + }, + "minecraft:dirt_path": { + "1.19.4": "soil" + }, + "minecraft:white_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:light_blue_concrete": { + "1.19.4": "stone" + }, + "minecraft:pointed_dripstone": { + "1.19.4": "stone" + }, + "minecraft:glass": { + "1.19.4": "glass" + }, + "minecraft:diamond_block": { + "1.19.4": "metal" + }, + "minecraft:azure_bluet": { + "1.19.4": "plant" + }, + "minecraft:andesite_wall": { + "1.19.4": "stone" + }, + "minecraft:infested_mossy_stone_bricks": { + "1.19.4": "organic_product" + }, + "minecraft:prismarine_brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:nether_brick_fence": { + "1.19.4": "stone" + }, + "minecraft:purple_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:cyan_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:potted_birch_sapling": { + "1.19.4": "decoration" + }, + "minecraft:cracked_polished_blackstone_bricks": { + "1.19.4": "stone" + }, + "minecraft:tripwire": { + "1.19.4": "decoration" + }, + "minecraft:nether_brick_slab": { + "1.19.4": "stone" + }, + "minecraft:red_candle": { + "1.19.4": "decoration" + }, + "minecraft:smooth_red_sandstone": { + "1.19.4": "stone" + }, + "minecraft:amethyst_block": { + "1.19.4": "amethyst" + }, + "minecraft:birch_door": { + "1.19.4": "wood" + }, + "minecraft:moss_block": { + "1.19.4": "moss_block" + }, + "minecraft:polished_blackstone_button": { + "1.19.4": "decoration" + }, + "minecraft:potted_torchflower": { + "1.19.4": "decoration" + }, + "minecraft:brown_wool": { + "1.19.4": "wool" + }, + "minecraft:bamboo_button": { + "1.19.4": "decoration" + }, + "minecraft:red_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:chiseled_stone_bricks": { + "1.19.4": "stone" + }, + "minecraft:cyan_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:light_blue_wool": { + "1.19.4": "wool" + }, + "minecraft:sea_pickle": { + "1.19.4": "underwater_plant" + }, + "minecraft:flower_pot": { + "1.19.4": "decoration" + }, + "minecraft:crimson_fence_gate": { + "1.19.4": "nether_wood" + }, + "minecraft:andesite": { + "1.19.4": "stone" + }, + "minecraft:wither_skeleton_wall_skull": { + "1.19.4": "decoration" + }, + "minecraft:purple_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:seagrass": { + "1.19.4": "replaceable_underwater_plant" + }, + "minecraft:shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:warped_pressure_plate": { + "1.19.4": "nether_wood" + }, + "minecraft:lime_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:green_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:black_carpet": { + "1.19.4": "carpet" + }, + "minecraft:cobbled_deepslate_wall": { + "1.19.4": "stone" + }, + "minecraft:red_sand": { + "1.19.4": "aggregate" + }, + "minecraft:budding_amethyst": { + "1.19.4": "amethyst" + }, + "minecraft:obsidian": { + "1.19.4": "stone" + }, + "minecraft:waxed_weathered_cut_copper_slab": { + "1.19.4": "metal" + }, + "minecraft:potted_dandelion": { + "1.19.4": "decoration" + }, + "minecraft:hopper": { + "1.19.4": "metal" + }, + "minecraft:water_cauldron": { + "1.19.4": "metal" + }, + "minecraft:purple_concrete": { + "1.19.4": "stone" + }, + "minecraft:bamboo_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:amethyst_cluster": { + "1.19.4": "amethyst" + }, + "minecraft:dark_oak_planks": { + "1.19.4": "wood" + }, + "minecraft:magenta_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:stripped_birch_log": { + "1.19.4": "wood" + }, + "minecraft:waxed_cut_copper_stairs": { + "1.19.4": "metal" + }, + "minecraft:orange_wool": { + "1.19.4": "wool" + }, + "minecraft:dead_brain_coral": { + "1.19.4": "stone" + }, + "minecraft:powder_snow": { + "1.19.4": "powder_snow" + }, + "minecraft:waxed_exposed_cut_copper_stairs": { + "1.19.4": "metal" + }, + "minecraft:jungle_log": { + "1.19.4": "wood" + }, + "minecraft:mangrove_stairs": { + "1.19.4": "wood" + }, + "minecraft:white_candle": { + "1.19.4": "decoration" + }, + "minecraft:twisting_vines_plant": { + "1.19.4": "plant" + }, + "minecraft:yellow_concrete": { + "1.19.4": "stone" + }, + "minecraft:cherry_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:end_stone_brick_slab": { + "1.19.4": "stone" + }, + "minecraft:water": { + "1.19.4": "water" + }, + "minecraft:lily_of_the_valley": { + "1.19.4": "plant" + }, + "minecraft:shroomlight": { + "1.19.4": "solid_organic" + }, + "minecraft:ladder": { + "1.19.4": "decoration" + }, + "minecraft:potted_wither_rose": { + "1.19.4": "decoration" + }, + "minecraft:magenta_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:dark_oak_log": { + "1.19.4": "wood" + }, + "minecraft:packed_ice": { + "1.19.4": "dense_ice" + }, + "minecraft:bee_nest": { + "1.19.4": "wood" + }, + "minecraft:observer": { + "1.19.4": "stone" + }, + "minecraft:brown_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:crimson_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:coal_ore": { + "1.19.4": "stone" + }, + "minecraft:jungle_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:dead_bubble_coral_wall_fan": { + "1.19.4": "stone" + }, + "minecraft:hay_block": { + "1.19.4": "solid_organic" + }, + "minecraft:black_candle": { + "1.19.4": "decoration" + }, + "minecraft:bamboo_stairs": { + "1.19.4": "wood" + }, + "minecraft:orange_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:acacia_log": { + "1.19.4": "wood" + }, + "minecraft:white_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:mangrove_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:nether_bricks": { + "1.19.4": "stone" + }, + "minecraft:lantern": { + "1.19.4": "metal" + }, + "minecraft:heavy_weighted_pressure_plate": { + "1.19.4": "metal" + }, + "minecraft:sculk_vein": { + "1.19.4": "sculk" + }, + "minecraft:cobbled_deepslate": { + "1.19.4": "stone" + }, + "minecraft:gold_ore": { + "1.19.4": "stone" + }, + "minecraft:snow": { + "1.19.4": "snow_layer" + }, + "minecraft:spruce_sapling": { + "1.19.4": "plant" + }, + "minecraft:soul_sand": { + "1.19.4": "aggregate" + }, + "minecraft:emerald_ore": { + "1.19.4": "stone" + }, + "minecraft:quartz_slab": { + "1.19.4": "stone" + }, + "minecraft:attached_pumpkin_stem": { + "1.19.4": "plant" + }, + "minecraft:cobblestone_wall": { + "1.19.4": "stone" + }, + "minecraft:cherry_fence_gate": { + "1.19.4": "wood" + }, + "minecraft:crimson_pressure_plate": { + "1.19.4": "nether_wood" + }, + "minecraft:stripped_warped_stem": { + "1.19.4": "nether_wood" + }, + "minecraft:bedrock": { + "1.19.4": "stone" + }, + "minecraft:end_portal": { + "1.19.4": "portal" + }, + "minecraft:torchflower_crop": { + "1.19.4": "plant" + }, + "minecraft:wet_sponge": { + "1.19.4": "sponge" + }, + "minecraft:frogspawn": { + "1.19.4": "frogspawn" + }, + "minecraft:potted_mangrove_propagule": { + "1.19.4": "decoration" + }, + "minecraft:soul_wall_torch": { + "1.19.4": "decoration" + }, + "minecraft:stone_brick_slab": { + "1.19.4": "stone" + }, + "minecraft:jungle_sign": { + "1.19.4": "wood" + }, + "minecraft:cyan_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:diorite_slab": { + "1.19.4": "stone" + }, + "minecraft:orange_banner": { + "1.19.4": "wood" + }, + "minecraft:oak_log": { + "1.19.4": "wood" + }, + "minecraft:orange_bed": { + "1.19.4": "wool" + }, + "minecraft:purple_banner": { + "1.19.4": "wood" + }, + "minecraft:purple_bed": { + "1.19.4": "wool" + }, + "minecraft:reinforced_deepslate": { + "1.19.4": "stone" + }, + "minecraft:yellow_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:dead_tube_coral_block": { + "1.19.4": "stone" + }, + "minecraft:stone_stairs": { + "1.19.4": "stone" + }, + "minecraft:mangrove_planks": { + "1.19.4": "wood" + }, + "minecraft:smooth_quartz_slab": { + "1.19.4": "stone" + }, + "minecraft:stripped_crimson_hyphae": { + "1.19.4": "nether_wood" + }, + "minecraft:chiseled_nether_bricks": { + "1.19.4": "stone" + }, + "minecraft:moss_carpet": { + "1.19.4": "plant" + }, + "minecraft:green_bed": { + "1.19.4": "wool" + }, + "minecraft:light_gray_concrete": { + "1.19.4": "stone" + }, + "minecraft:oxidized_cut_copper": { + "1.19.4": "metal" + }, + "minecraft:brown_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:green_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:skeleton_skull": { + "1.19.4": "decoration" + }, + "minecraft:cherry_log": { + "1.19.4": "wood" + }, + "minecraft:beacon": { + "1.19.4": "glass" + }, + "minecraft:jungle_sapling": { + "1.19.4": "plant" + }, + "minecraft:mud_brick_slab": { + "1.19.4": "stone" + }, + "minecraft:spruce_sign": { + "1.19.4": "wood" + }, + "minecraft:lime_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:purpur_stairs": { + "1.19.4": "stone" + }, + "minecraft:mossy_cobblestone_slab": { + "1.19.4": "stone" + }, + "minecraft:deepslate_coal_ore": { + "1.19.4": "stone" + }, + "minecraft:dark_oak_pressure_plate": { + "1.19.4": "wood" + }, + "minecraft:cut_copper_stairs": { + "1.19.4": "metal" + }, + "minecraft:polished_andesite_slab": { + "1.19.4": "stone" + }, + "minecraft:acacia_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:polished_diorite": { + "1.19.4": "stone" + }, + "minecraft:potted_allium": { + "1.19.4": "decoration" + }, + "minecraft:end_gateway": { + "1.19.4": "portal" + }, + "minecraft:stonecutter": { + "1.19.4": "stone" + }, + "minecraft:white_wool": { + "1.19.4": "wool" + }, + "minecraft:smooth_stone_slab": { + "1.19.4": "stone" + }, + "minecraft:light_gray_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:yellow_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:lime_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:spruce_wall_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:potted_warped_roots": { + "1.19.4": "decoration" + }, + "minecraft:acacia_trapdoor": { + "1.19.4": "wood" + }, + "minecraft:pink_terracotta": { + "1.19.4": "stone" + }, + "minecraft:cave_vines": { + "1.19.4": "plant" + }, + "minecraft:cut_sandstone_slab": { + "1.19.4": "stone" + }, + "minecraft:dirt": { + "1.19.4": "soil" + }, + "minecraft:deepslate_tile_slab": { + "1.19.4": "stone" + }, + "minecraft:stripped_acacia_wood": { + "1.19.4": "wood" + }, + "minecraft:stripped_cherry_log": { + "1.19.4": "wood" + }, + "minecraft:mossy_stone_brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:kelp_plant": { + "1.19.4": "underwater_plant" + }, + "minecraft:spruce_pressure_plate": { + "1.19.4": "wood" + }, + "minecraft:crimson_planks": { + "1.19.4": "nether_wood" + }, + "minecraft:potted_orange_tulip": { + "1.19.4": "decoration" + }, + "minecraft:potted_brown_mushroom": { + "1.19.4": "decoration" + }, + "minecraft:dead_tube_coral_fan": { + "1.19.4": "stone" + }, + "minecraft:brown_mushroom_block": { + "1.19.4": "wood" + }, + "minecraft:tripwire_hook": { + "1.19.4": "decoration" + }, + "minecraft:black_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:crimson_slab": { + "1.19.4": "nether_wood" + }, + "minecraft:polished_deepslate_stairs": { + "1.19.4": "stone" + }, + "minecraft:torchflower": { + "1.19.4": "plant" + }, + "minecraft:prismarine_stairs": { + "1.19.4": "stone" + }, + "minecraft:magenta_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:acacia_slab": { + "1.19.4": "wood" + }, + "minecraft:smooth_red_sandstone_slab": { + "1.19.4": "stone" + }, + "minecraft:lime_banner": { + "1.19.4": "wood" + }, + "minecraft:stripped_bamboo_block": { + "1.19.4": "wood" + }, + "minecraft:potted_acacia_sapling": { + "1.19.4": "decoration" + }, + "minecraft:stripped_jungle_log": { + "1.19.4": "wood" + }, + "minecraft:pink_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:black_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:horn_coral_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:nether_wart_block": { + "1.19.4": "solid_organic" + }, + "minecraft:campfire": { + "1.19.4": "wood" + }, + "minecraft:light_blue_bed": { + "1.19.4": "wool" + }, + "minecraft:light_gray_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:jack_o_lantern": { + "1.19.4": "gourd" + }, + "minecraft:pink_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:cyan_concrete": { + "1.19.4": "stone" + }, + "minecraft:cyan_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:wall_torch": { + "1.19.4": "decoration" + }, + "minecraft:gray_carpet": { + "1.19.4": "carpet" + }, + "minecraft:beehive": { + "1.19.4": "wood" + }, + "minecraft:mud_bricks": { + "1.19.4": "stone" + }, + "minecraft:white_banner": { + "1.19.4": "wood" + }, + "minecraft:bone_block": { + "1.19.4": "stone" + }, + "minecraft:smooth_sandstone_stairs": { + "1.19.4": "stone" + }, + "minecraft:netherite_block": { + "1.19.4": "metal" + }, + "minecraft:cyan_banner": { + "1.19.4": "wood" + }, + "minecraft:diorite_wall": { + "1.19.4": "stone" + }, + "minecraft:jigsaw": { + "1.19.4": "metal" + }, + "minecraft:weathered_cut_copper_slab": { + "1.19.4": "metal" + }, + "minecraft:red_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:chiseled_red_sandstone": { + "1.19.4": "stone" + }, + "minecraft:yellow_candle": { + "1.19.4": "decoration" + }, + "minecraft:granite_slab": { + "1.19.4": "stone" + }, + "minecraft:cyan_candle": { + "1.19.4": "decoration" + }, + "minecraft:yellow_bed": { + "1.19.4": "wool" + }, + "minecraft:mud_brick_stairs": { + "1.19.4": "stone" + }, + "minecraft:lime_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:black_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:potted_flowering_azalea_bush": { + "1.19.4": "decoration" + }, + "minecraft:warped_stem": { + "1.19.4": "nether_wood" + }, + "minecraft:crimson_fence": { + "1.19.4": "nether_wood" + }, + "minecraft:creeper_head": { + "1.19.4": "decoration" + }, + "minecraft:oxidized_copper": { + "1.19.4": "metal" + }, + "minecraft:dead_bush": { + "1.19.4": "replaceable_plant" + }, + "minecraft:lily_pad": { + "1.19.4": "plant" + }, + "minecraft:potted_red_tulip": { + "1.19.4": "decoration" + }, + "minecraft:birch_log": { + "1.19.4": "wood" + }, + "minecraft:spruce_stairs": { + "1.19.4": "wood" + }, + "minecraft:chiseled_quartz_block": { + "1.19.4": "stone" + }, + "minecraft:dead_fire_coral_wall_fan": { + "1.19.4": "stone" + }, + "minecraft:tube_coral_wall_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:dark_oak_slab": { + "1.19.4": "wood" + }, + "minecraft:orange_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:smooth_sandstone_slab": { + "1.19.4": "stone" + }, + "minecraft:bamboo_pressure_plate": { + "1.19.4": "wood" + }, + "minecraft:smooth_stone": { + "1.19.4": "stone" + }, + "minecraft:cobblestone": { + "1.19.4": "stone" + }, + "minecraft:deepslate_gold_ore": { + "1.19.4": "stone" + }, + "minecraft:light": { + "1.19.4": "air" + }, + "minecraft:prismarine_wall": { + "1.19.4": "stone" + }, + "minecraft:yellow_carpet": { + "1.19.4": "carpet" + }, + "minecraft:detector_rail": { + "1.19.4": "decoration" + }, + "minecraft:cherry_pressure_plate": { + "1.19.4": "wood" + }, + "minecraft:verdant_froglight": { + "1.19.4": "froglight" + }, + "minecraft:dead_bubble_coral": { + "1.19.4": "stone" + }, + "minecraft:grindstone": { + "1.19.4": "repair_station" + }, + "minecraft:stripped_warped_hyphae": { + "1.19.4": "nether_wood" + }, + "minecraft:waxed_cut_copper_slab": { + "1.19.4": "metal" + }, + "minecraft:acacia_stairs": { + "1.19.4": "wood" + }, + "minecraft:orange_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:magenta_terracotta": { + "1.19.4": "stone" + }, + "minecraft:mangrove_wood": { + "1.19.4": "wood" + }, + "minecraft:mossy_stone_bricks": { + "1.19.4": "stone" + }, + "minecraft:chorus_plant": { + "1.19.4": "plant" + }, + "minecraft:deepslate_brick_wall": { + "1.19.4": "stone" + }, + "minecraft:zombie_wall_head": { + "1.19.4": "decoration" + }, + "minecraft:large_fern": { + "1.19.4": "replaceable_plant" + }, + "minecraft:polished_blackstone_brick_wall": { + "1.19.4": "stone" + }, + "minecraft:sculk": { + "1.19.4": "sculk" + }, + "minecraft:gray_concrete": { + "1.19.4": "stone" + }, + "minecraft:pumpkin_stem": { + "1.19.4": "plant" + }, + "minecraft:dead_fire_coral": { + "1.19.4": "stone" + }, + "minecraft:hanging_roots": { + "1.19.4": "replaceable_plant" + }, + "minecraft:tall_grass": { + "1.19.4": "replaceable_plant" + }, + "minecraft:white_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:polished_diorite_slab": { + "1.19.4": "stone" + }, + "minecraft:jukebox": { + "1.19.4": "wood" + }, + "minecraft:light_gray_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:dead_brain_coral_fan": { + "1.19.4": "stone" + }, + "minecraft:waxed_oxidized_cut_copper_stairs": { + "1.19.4": "metal" + }, + "minecraft:structure_block": { + "1.19.4": "metal" + }, + "minecraft:quartz_stairs": { + "1.19.4": "stone" + }, + "minecraft:brown_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:dead_bubble_coral_fan": { + "1.19.4": "stone" + }, + "minecraft:fire_coral_wall_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:basalt": { + "1.19.4": "stone" + }, + "minecraft:polished_blackstone_pressure_plate": { + "1.19.4": "stone" + }, + "minecraft:piston": { + "1.19.4": "piston" + }, + "minecraft:crying_obsidian": { + "1.19.4": "stone" + }, + "minecraft:mushroom_stem": { + "1.19.4": "wood" + }, + "minecraft:bamboo_planks": { + "1.19.4": "wood" + }, + "minecraft:end_stone_bricks": { + "1.19.4": "stone" + }, + "minecraft:cyan_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:red_mushroom": { + "1.19.4": "plant" + }, + "minecraft:brown_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:gold_block": { + "1.19.4": "metal" + }, + "minecraft:respawn_anchor": { + "1.19.4": "stone" + }, + "minecraft:infested_stone": { + "1.19.4": "organic_product" + }, + "minecraft:black_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:purple_glazed_terracotta": { + "1.19.4": "stone" + }, + "minecraft:cherry_slab": { + "1.19.4": "wood" + }, + "minecraft:flowering_azalea": { + "1.19.4": "plant" + }, + "minecraft:stripped_spruce_wood": { + "1.19.4": "wood" + }, + "minecraft:brain_coral_block": { + "1.19.4": "stone" + }, + "minecraft:light_blue_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:oak_trapdoor": { + "1.19.4": "wood" + }, + "minecraft:blackstone_slab": { + "1.19.4": "stone" + }, + "minecraft:wheat": { + "1.19.4": "plant" + }, + "minecraft:scaffolding": { + "1.19.4": "decoration" + }, + "minecraft:polished_granite_stairs": { + "1.19.4": "stone" + }, + "minecraft:orange_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:emerald_block": { + "1.19.4": "metal" + }, + "minecraft:stripped_oak_wood": { + "1.19.4": "wood" + }, + "minecraft:potted_bamboo": { + "1.19.4": "decoration" + }, + "minecraft:red_candle_cake": { + "1.19.4": "cake" + }, + "minecraft:iron_bars": { + "1.19.4": "metal" + }, + "minecraft:sand": { + "1.19.4": "aggregate" + }, + "minecraft:oak_hanging_sign": { + "1.19.4": "wood" + }, + "minecraft:chiseled_sandstone": { + "1.19.4": "stone" + }, + "minecraft:air": { + "1.19.4": "air" + }, + "minecraft:magma_block": { + "1.19.4": "stone" + }, + "minecraft:redstone_ore": { + "1.19.4": "stone" + }, + "minecraft:oxidized_cut_copper_stairs": { + "1.19.4": "metal" + }, + "minecraft:dead_horn_coral_block": { + "1.19.4": "stone" + }, + "minecraft:acacia_door": { + "1.19.4": "wood" + }, + "minecraft:dark_oak_sign": { + "1.19.4": "wood" + }, + "minecraft:exposed_copper": { + "1.19.4": "metal" + }, + "minecraft:brown_concrete_powder": { + "1.19.4": "aggregate" + }, + "minecraft:poppy": { + "1.19.4": "plant" + }, + "minecraft:cut_red_sandstone": { + "1.19.4": "stone" + }, + "minecraft:lapis_ore": { + "1.19.4": "stone" + }, + "minecraft:smooth_sandstone": { + "1.19.4": "stone" + }, + "minecraft:turtle_egg": { + "1.19.4": "egg" + }, + "minecraft:bamboo_door": { + "1.19.4": "wood" + }, + "minecraft:dark_oak_trapdoor": { + "1.19.4": "wood" + }, + "minecraft:purple_stained_glass_pane": { + "1.19.4": "glass" + }, + "minecraft:attached_melon_stem": { + "1.19.4": "plant" + }, + "minecraft:piglin_wall_head": { + "1.19.4": "decoration" + }, + "minecraft:dark_oak_stairs": { + "1.19.4": "wood" + }, + "minecraft:orange_tulip": { + "1.19.4": "plant" + }, + "minecraft:copper_ore": { + "1.19.4": "stone" + }, + "minecraft:packed_mud": { + "1.19.4": "soil" + }, + "minecraft:mycelium": { + "1.19.4": "solid_organic" + }, + "minecraft:short_grass": { + "1.19.4": "replaceable_plant" + }, + "minecraft:warped_roots": { + "1.19.4": "nether_shoots" + }, + "minecraft:frosted_ice": { + "1.19.4": "ice" + }, + "minecraft:bricks": { + "1.19.4": "stone" + }, + "minecraft:oak_pressure_plate": { + "1.19.4": "wood" + }, + "minecraft:magenta_carpet": { + "1.19.4": "carpet" + }, + "minecraft:decorated_pot": { + "1.19.4": "decorated_pot" + }, + "minecraft:purpur_slab": { + "1.19.4": "stone" + }, + "minecraft:stone_brick_wall": { + "1.19.4": "stone" + }, + "minecraft:structure_void": { + "1.19.4": "structure_void" + }, + "minecraft:magenta_shulker_box": { + "1.13.2": "stone", + "1.19.4": "shulker_box" + }, + "minecraft:brain_coral_wall_fan": { + "1.19.4": "underwater_plant" + }, + "minecraft:ender_chest": { + "1.19.4": "stone" + }, + "minecraft:orange_concrete": { + "1.19.4": "stone" + }, + "minecraft:end_stone_brick_wall": { + "1.19.4": "stone" + }, + "minecraft:big_dripleaf": { + "1.19.4": "plant" + }, + "minecraft:green_wall_banner": { + "1.19.4": "wood" + }, + "minecraft:red_concrete": { + "1.19.4": "stone" + }, + "minecraft:nether_portal": { + "1.19.4": "portal" + }, + "minecraft:fern": { + "1.19.4": "replaceable_plant" + }, + "minecraft:nether_quartz_ore": { + "1.19.4": "stone" + }, + "minecraft:soul_campfire": { + "1.19.4": "wood" + }, + "minecraft:red_banner": { + "1.19.4": "wood" + }, + "minecraft:repeater": { + "1.19.4": "decoration" + }, + "minecraft:dripstone_block": { + "1.19.4": "stone" + }, + "minecraft:pink_wool": { + "1.19.4": "wool" + }, + "minecraft:carrots": { + "1.19.4": "plant" + }, + "minecraft:light_blue_stained_glass": { + "1.19.4": "glass" + }, + "minecraft:purple_candle": { + "1.19.4": "decoration" + }, + "minecraft:birch_wall_sign": { + "1.19.4": "wood" + }, + "minecraft:nether_sprouts": { + "1.19.4": "nether_shoots" + }, + "minecraft:light_gray_candle": { + "1.19.4": "decoration" + }, + "minecraft:stripped_dark_oak_log": { + "1.19.4": "wood" + }, + "minecraft:potted_dark_oak_sapling": { + "1.19.4": "decoration" + }, + "minecraft:cut_copper_slab": { + "1.19.4": "metal" + }, + "minecraft:oak_wall_sign": { + "1.19.4": "wood" + }, + "minecraft:bubble_coral": { + "1.19.4": "underwater_plant" + }, + "minecraft:bamboo_mosaic": { + "1.19.4": "wood" + }, + "minecraft:twisting_vines": { + "1.19.4": "plant" + }, + "minecraft:pumpkin": { + "1.19.4": "gourd" + }, + "minecraft:spruce_fence": { + "1.19.4": "wood" + }, + "minecraft:bamboo_sign": { + "1.19.4": "wood" + }, + "minecraft:ice": { + "1.19.4": "ice" + }, + "minecraft:large_amethyst_bud": { + "1.19.4": "amethyst" + }, + "minecraft:coarse_dirt": { + "1.19.4": "soil" + }, + "minecraft:cherry_fence": { + "1.19.4": "wood" + }, + "minecraft:end_portal_frame": { + "1.19.4": "stone" + } + } +} diff --git a/src/main/resources/assets/icons/icon.png b/src/main/resources/assets/viaproxy/icons/icon.png similarity index 100% rename from src/main/resources/assets/icons/icon.png rename to src/main/resources/assets/viaproxy/icons/icon.png diff --git a/src/main/resources/assets/language/cs_CZ.properties b/src/main/resources/assets/viaproxy/language/cs_CZ.properties similarity index 100% rename from src/main/resources/assets/language/cs_CZ.properties rename to src/main/resources/assets/viaproxy/language/cs_CZ.properties diff --git a/src/main/resources/assets/language/de_DE.properties b/src/main/resources/assets/viaproxy/language/de_DE.properties similarity index 100% rename from src/main/resources/assets/language/de_DE.properties rename to src/main/resources/assets/viaproxy/language/de_DE.properties diff --git a/src/main/resources/assets/language/en_US.properties b/src/main/resources/assets/viaproxy/language/en_US.properties similarity index 100% rename from src/main/resources/assets/language/en_US.properties rename to src/main/resources/assets/viaproxy/language/en_US.properties diff --git a/src/main/resources/assets/language/hu_HU.properties b/src/main/resources/assets/viaproxy/language/hu_HU.properties similarity index 100% rename from src/main/resources/assets/language/hu_HU.properties rename to src/main/resources/assets/viaproxy/language/hu_HU.properties diff --git a/src/main/resources/assets/language/pl_PL.properties b/src/main/resources/assets/viaproxy/language/pl_PL.properties similarity index 100% rename from src/main/resources/assets/language/pl_PL.properties rename to src/main/resources/assets/viaproxy/language/pl_PL.properties diff --git a/src/main/resources/assets/language/ru_RU.properties b/src/main/resources/assets/viaproxy/language/ru_RU.properties similarity index 100% rename from src/main/resources/assets/language/ru_RU.properties rename to src/main/resources/assets/viaproxy/language/ru_RU.properties diff --git a/src/main/resources/assets/language/zh_CN.properties b/src/main/resources/assets/viaproxy/language/zh_CN.properties similarity index 100% rename from src/main/resources/assets/language/zh_CN.properties rename to src/main/resources/assets/viaproxy/language/zh_CN.properties