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