From 6b67e43f8463aa2ea0672d901e587a22a595ed7a Mon Sep 17 00:00:00 2001 From: rtm516 Date: Sun, 15 Oct 2023 21:51:06 +0100 Subject: [PATCH 01/86] Update AesKeyProducer.java (#4211) --- .../floodgate/crypto/AesKeyProducer.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java b/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java index 77dd46fde..4fae21b32 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java @@ -55,19 +55,20 @@ public final class AesKeyProducer implements KeyProducer { } private SecureRandom secureRandom() throws NoSuchAlgorithmException { - // use Windows-PRNG for windows (default impl is SHA1PRNG) - if (System.getProperty("os.name").startsWith("Windows")) { - return SecureRandom.getInstance("Windows-PRNG"); - } else { - try { + try { + // use Windows-PRNG for windows (default impl is SHA1PRNG) + if (System.getProperty("os.name").startsWith("Windows")) { + return SecureRandom.getInstance("Windows-PRNG"); + } else { // NativePRNG (which should be the default on unix-systems) can still block your // system. Even though it isn't as bad as NativePRNGBlocking, we still try to // prevent that if possible return SecureRandom.getInstance("NativePRNGNonBlocking"); - } catch (NoSuchAlgorithmException ignored) { - // at this point we just have to go with the default impl even if it blocks - return new SecureRandom(); + } + } catch (NoSuchAlgorithmException ignored) { + // Fall back to the default impl as we couldn't load any others + return new SecureRandom(); } } } From 647a73d9f625dad9ae44f470dbdd61f09945b412 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Thu, 19 Oct 2023 01:11:59 -0400 Subject: [PATCH 02/86] Support 1.20.40 connections --- .../geysermc/geyser/network/GameProtocol.java | 10 +- .../geyser/network/UpstreamPacketHandler.java | 2 + .../populator/BlockRegistryPopulator.java | 4 + .../populator/ItemRegistryPopulator.java | 2 + .../bedrock/block_palette.1_20_40.nbt | Bin 0 -> 158101 bytes .../bedrock/creative_items.1_20_40.json | 5787 +++++++++++++++++ .../bedrock/runtime_item_states.1_20_40.json | 5570 ++++++++++++++++ gradle/libs.versions.toml | 6 +- 8 files changed, 11373 insertions(+), 8 deletions(-) create mode 100644 core/src/main/resources/bedrock/block_palette.1_20_40.nbt create mode 100644 core/src/main/resources/bedrock/creative_items.1_20_40.json create mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_20_40.json diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index fb9684f77..bf40ea2f9 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -31,6 +31,7 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618; +import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.geyser.session.GeyserSession; @@ -46,9 +47,7 @@ public final class GameProtocol { * Default Bedrock codec that should act as a fallback. Should represent the latest available * release of the game that Geyser supports. */ - public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v618.CODEC.toBuilder() - .minecraftVersion("1.20.31") - .build(); + public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v622.CODEC; /** * A list of all supported Bedrock versions that can join Geyser @@ -68,9 +67,10 @@ public final class GameProtocol { SUPPORTED_BEDROCK_CODECS.add(Bedrock_v594.CODEC.toBuilder() .minecraftVersion("1.20.10/1.20.15") .build()); - SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() - .minecraftVersion("1.20.30/1.20.31") + SUPPORTED_BEDROCK_CODECS.add(Bedrock_v618.CODEC.toBuilder() + .minecraftVersion("1.20.30/1.20.32") .build()); + SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); } /** diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index 361aaffb9..358d8df59 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -110,6 +110,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { } else if (protocolVersion < GameProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()) { session.disconnect(GeyserLocale.getLocaleStringLog("geyser.network.outdated.client", supportedVersions)); return false; + } else { + throw new IllegalStateException("Default codec of protocol version " + protocolVersion + " should have been found"); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 86c380bbd..278ebadfb 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -36,11 +36,13 @@ import it.unimi.dsi.fastutil.objects.*; import org.cloudburstmc.blockstateupdater.BlockStateUpdater; import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_10; import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_30; +import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_40; import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext; import org.cloudburstmc.nbt.*; import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618; +import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -117,11 +119,13 @@ public final class BlockRegistryPopulator { private static void registerBedrockBlocks() { Remapper mapper594 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE); Remapper mapper618 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE, BlockStateUpdater_1_20_30.INSTANCE); + Remapper mapper622 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE, BlockStateUpdater_1_20_30.INSTANCE, BlockStateUpdater_1_20_40.INSTANCE); var blockMappers = ImmutableMap., Remapper>builder() .put(ObjectIntPair.of("1_20_0", Bedrock_v589.CODEC.getProtocolVersion()), tag -> tag) .put(ObjectIntPair.of("1_20_10", Bedrock_v594.CODEC.getProtocolVersion()), mapper594) .put(ObjectIntPair.of("1_20_30", Bedrock_v618.CODEC.getProtocolVersion()), mapper618) + .put(ObjectIntPair.of("1_20_40", Bedrock_v622.CODEC.getProtocolVersion()), mapper622) .build(); // We can keep this strong as nothing should be garbage collected diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 8f04ebbe5..857726038 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -41,6 +41,7 @@ import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618; +import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; @@ -116,6 +117,7 @@ public class ItemRegistryPopulator { paletteVersions.add(new PaletteVersion("1_20_0", Bedrock_v589.CODEC.getProtocolVersion())); paletteVersions.add(new PaletteVersion("1_20_10", Bedrock_v594.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper594)); paletteVersions.add(new PaletteVersion("1_20_30", Bedrock_v618.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper618)); + paletteVersions.add(new PaletteVersion("1_20_40", Bedrock_v622.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper618)); // NO item changes between 1.20.30 and 1.20.40 GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/resources/bedrock/block_palette.1_20_40.nbt b/core/src/main/resources/bedrock/block_palette.1_20_40.nbt new file mode 100644 index 0000000000000000000000000000000000000000..b18b0807a48e0109e46eebfa93ca8c77d956ea3a GIT binary patch literal 158101 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

g-=;VUl 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⁡z#A(DebW+` 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%0D8NL_yw6CPSm^x#@W)*%Q+? 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 bpUvdU1E#~Pzl`yiv-g&@bjG3vY-s-jSX!9v literal 0 HcmV?d00001 diff --git a/core/src/main/resources/bedrock/creative_items.1_20_40.json b/core/src/main/resources/bedrock/creative_items.1_20_40.json new file mode 100644 index 000000000..b2c0bfe04 --- /dev/null +++ b/core/src/main/resources/bedrock/creative_items.1_20_40.json @@ -0,0 +1,5787 @@ +{ + "items": [ + { + "id": "minecraft:planks", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZE/NqzcKBgBzdGF0ZXMICQB3b29kX3R5cGUDAG9hawADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:planks", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZHl/r2YKBgBzdGF0ZXMICQB3b29kX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:planks", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZL6SoXYKBgBzdGF0ZXMICQB3b29kX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:planks", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZKYD6L0KBgBzdGF0ZXMICQB3b29kX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:planks", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZJ0zTHYKBgBzdGF0ZXMICQB3b29kX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:planks", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZOf6hVkKBgBzdGF0ZXMICQB3b29kX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:mangrove_planks", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZEvnlCYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cherry_planks", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQTXpRoCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:bamboo_planks", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTi8ySSCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:bamboo_mosaic", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQZ/p8xCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:crimson_planks", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkwtJDdQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:warped_planks", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWStTABvCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSE4JosCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBjb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTUvV6XCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9jb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT4opb2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBncmFuaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQAMQTVCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBkaW9yaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQIbDOcCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCABhbmRlc2l0ZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSZKhusCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBzYW5kc3RvbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSp4zgCCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDQByZWRfc2FuZHN0b25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRbqVHTCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBzdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRr0ZT/CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9zdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRnLis3CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBQBicmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQNLzfSCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDABuZXRoZXJfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQ5h0xwCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEAByZWRfbmV0aGVyX2JyaWNrCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWS9J0B2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBlbmRfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRPbkJeCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCgBwcmlzbWFyaW5lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:blackstone_wall", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZMbeBBsKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:polished_blackstone_wall", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZAJLsz8KBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:polished_blackstone_brick_wall", + "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZEbLV8cKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cobbled_deepslate_wall", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRCnPrFCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:deepslate_tile_wall", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWTqw4s4CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:polished_deepslate_wall", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkIvBYYwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:deepslate_brick_wall", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkwlrCGwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:mud_brick_wall", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkH/1WZQoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:oak_fence", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:spruce_fence", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZD1QUEoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:birch_fence", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkmCUV2QoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:jungle_fence", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHz1VxkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:acacia_fence", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZNVGubwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:dark_oak_fence", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk2w+gEwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:mangrove_fence", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkKEcd0goGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cherry_fence", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZPCBxAIKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:bamboo_fence", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZJNXKFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:nether_brick_fence", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLnjLF4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:crimson_fence", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWR3OH3OCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:warped_fence", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZCpaGC8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:fence_gate", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWR+T9kTCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:spruce_fence_gate", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkEnw5egoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:birch_fence_gate", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQL77/BCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:jungle_fence_gate", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkA1zgtgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:acacia_fence_gate", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkHg/kTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:dark_oak_fence_gate", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWTwjOCeCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:mangrove_fence_gate", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWSfweCSCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cherry_fence_gate", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lk/9bTZQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:bamboo_fence_gate", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkzIpPywoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:crimson_fence_gate", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZDQzVbEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:warped_fence_gate", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkkf+/3QoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:normal_stone_stairs", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQeH1ALCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_stairs", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:mossy_cobblestone_stairs", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZFIfrhkKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:oak_stairs", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWQJjyzBCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:spruce_stairs", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWTv+is3CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:birch_stairs", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZFyPlHAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:jungle_stairs", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWR0z5d4CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:acacia_stairs", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWS7Jwz6CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:dark_oak_stairs", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZCmBYKAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:mangrove_stairs", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZChzUAsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cherry_stairs", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRQwq31CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:bamboo_stairs", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWTVPh42CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:bamboo_mosaic_stairs", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lk44PHjgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_brick_stairs", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZDMyMgIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:mossy_stone_brick_stairs", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZANTOsMKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:sandstone_stairs", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWSV/834CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:smooth_sandstone_stairs", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lksR+m8QoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_sandstone_stairs", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLYVt3woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone_stairs", + "block_state_b64": "CgAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZMHNND8KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:granite_stairs", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkPkcB1goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:polished_granite_stairs", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkMmEm3AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:diorite_stairs", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lk6i6nBQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:polished_diorite_stairs", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkbt2ioAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:andesite_stairs", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZKhXEgUKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:polished_andesite_stairs", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJTHrlEKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:brick_stairs", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZNeMh58KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:nether_brick_stairs", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWQDiw5yCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_nether_brick_stairs", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkx2IMtAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:end_brick_stairs", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWTN7KFaCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:quartz_stairs", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRmUTh7CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:smooth_quartz_stairs", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkzsgQyQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:purpur_stairs", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWTT+rxiCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:prismarine_stairs", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkxTJfeAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:dark_prismarine_stairs", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTVu7TCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:prismarine_bricks_stairs", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGEFwLYKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:crimson_stairs", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lktXE00AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:warped_stairs", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWQ+E5VrCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:blackstone_stairs", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk5fWI5goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:polished_blackstone_stairs", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkGTf7sgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:polished_blackstone_brick_stairs", + "block_state_b64": "CgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkgYeOdAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cut_copper_stairs", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkeetf7woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:exposed_cut_copper_stairs", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWSg73zdCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:weathered_cut_copper_stairs", + "block_state_b64": "CgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOnbRf4KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:oxidized_cut_copper_stairs", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkmRjDnQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:waxed_cut_copper_stairs", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkmYqoqAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_stairs", + "block_state_b64": "CgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQgCPROCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_stairs", + "block_state_b64": "CgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZHlwHVsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_stairs", + "block_state_b64": "CgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkYQXzzgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cobbled_deepslate_stairs", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZJUvOYIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:deepslate_tile_stairs", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZJEOgIsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:polished_deepslate_stairs", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWSRVPnYCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:deepslate_brick_stairs", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ1qEDCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:mud_brick_stairs", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWSm9N3MCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:wooden_door" + }, + { + "id": "minecraft:spruce_door" + }, + { + "id": "minecraft:birch_door" + }, + { + "id": "minecraft:jungle_door" + }, + { + "id": "minecraft:acacia_door" + }, + { + "id": "minecraft:dark_oak_door" + }, + { + "id": "minecraft:mangrove_door" + }, + { + "id": "minecraft:cherry_door" + }, + { + "id": "minecraft:bamboo_door" + }, + { + "id": "minecraft:iron_door" + }, + { + "id": "minecraft:crimson_door" + }, + { + "id": "minecraft:warped_door" + }, + { + "id": "minecraft:trapdoor", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:spruce_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZPHy1K0KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:birch_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkeJWDfgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:jungle_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZEy2fJoKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:acacia_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZOHj8E8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:dark_oak_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lko5ZHTwoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:mangrove_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkkF/mxAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cherry_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZOA7eNgKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:bamboo_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZLvbPz8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:iron_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWTvSVl/CgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:crimson_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQLjMYVCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:warped_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZHKR/hYKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:iron_bars", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZN2LB5IKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:glass", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:white_stained_glass", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWRndBrUCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:light_gray_stained_glass", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZEv2giYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:gray_stained_glass", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZDomVrUKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:black_stained_glass", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWSV7doJCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:brown_stained_glass", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWRMzE/lCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_stained_glass", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lk283lWAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:orange_stained_glass", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lkW5CkhQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:yellow_stained_glass", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lkkdDyXQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:lime_stained_glass", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZDxX85UKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:green_stained_glass", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWTlDhnECgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cyan_stained_glass", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZOL1lHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:light_blue_stained_glass", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZNbwulIKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:blue_stained_glass", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZENsjFwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:purple_stained_glass", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkD98ZxgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:magenta_stained_glass", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZG+iFRoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:pink_stained_glass", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZKdEricKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:tinted_glass", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZGSvWX8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:glass_pane", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:white_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZBEr/DYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:light_gray_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lk9dp5VgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:gray_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkmrGO5woGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:black_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZDv++oQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:brown_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZMz9L0wKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:red_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQBjCTmCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:orange_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSt/7a5CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:yellow_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWTXRAS7CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:lime_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lkYJDnggoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:green_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZHOnixoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cyan_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkUqFUeQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:light_blue_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkFuy4MQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:blue_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lk1eBLUAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:purple_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSNsdK5CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:magenta_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lkVbOR7AoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:pink_stained_glass_pane", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkIR92xwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:ladder", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZCgvzlsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:scaffolding", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkD13mlAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWTkNl0JCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQwAc21vb3RoX3N0b25lAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkQJoxlgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNAUAc3RvbmUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWRHh04KCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQsAY29iYmxlc3RvbmUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkVRZB+woGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhEAbW9zc3lfY29iYmxlc3RvbmUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkBaobgAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUDAG9hawADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkhz9TeQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lk3HkwowoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkDIBqVQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkL5hFYAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkKRUHSQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:mangrove_slab", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQx6U1yCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cherry_slab", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lk2VVsZQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:bamboo_slab", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkVC+0twoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:bamboo_mosaic_slab", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZOLZHFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWQSiInOCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQsAc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkoF89tgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAbW9zc3lfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSkoAE4CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQkAc2FuZHN0b25lAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkWfF7pgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0AY3V0X3NhbmRzdG9uZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkbKRChAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAc21vb3RoX3NhbmRzdG9uZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkBlrvqAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg0AcmVkX3NhbmRzdG9uZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkRWFXuwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAY3V0X3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkom8neQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxQAc21vb3RoX3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkd1ZaWgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZ3Jhbml0ZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkISH4iwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZ3Jhbml0ZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkqxEDMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZGlvcml0ZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkSYs86QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZGlvcml0ZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkq6BU6goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwgAYW5kZXNpdGUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkTSXY8AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxEAcG9saXNoZWRfYW5kZXNpdGUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWQiYHKTCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQUAYnJpY2sAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWTk/0LfCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQwAbmV0aGVyX2JyaWNrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk/hXQ7AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcmVkX25ldGhlcl9icmljawADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkYJNxrwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMw8AZW5kX3N0b25lX2JyaWNrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWRlj0/sCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQYAcXVhcnR6AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkMae+2goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0Ac21vb3RoX3F1YXJ0egADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk+kMHGAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMgYAcHVycHVyAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkKOSOMAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9yb3VnaAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk8igLCQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg8AcHJpc21hcmluZV9kYXJrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkSFbyEwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9icmljawADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:crimson_slab", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZAxRUWAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:warped_slab", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lk1yq11AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:blackstone_slab", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZGy1DjwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:polished_blackstone_slab", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZJj2bXIKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:polished_blackstone_brick_slab", + "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZOyWX94KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cut_copper_slab", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZOTm2nsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:exposed_cut_copper_slab", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkrUlZLwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:weathered_cut_copper_slab", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWQgnaDiCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:oxidized_cut_copper_slab", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZMzFSRgKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:waxed_cut_copper_slab", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZFRBvDAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_slab", + "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkHTGcTgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_slab", + "block_state_b64": "CgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSgJR+XCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_slab", + "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZIxsnFYKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cobbled_deepslate_slab", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTYAoX5CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:polished_deepslate_slab", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lkuFYMAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:deepslate_tile_slab", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWQwlbFCCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:deepslate_brick_slab", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkWMoragoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:mud_brick_slab", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkl4nnMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:brick_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkqeGWRgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:chiseled_nether_bricks", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWS8TJ+TCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cracked_nether_bricks", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZIUSejwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:quartz_bricks", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWSc5xCLCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stonebrick", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWQ5kni1CgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAZGVmYXVsdAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stonebrick", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWTDw813CgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQUAbW9zc3kAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stonebrick", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWSTvQGECgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAY3JhY2tlZAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stonebrick", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWQIM0OwCgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQgAY2hpc2VsZWQAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:end_bricks", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWQ/vDihCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:prismarine", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWSH021WCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBgBicmlja3MAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:polished_blackstone_bricks", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkUw9b3woGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cracked_polished_blackstone_bricks", + "block_state_b64": "CgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWQ3UlRYCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:gilded_blackstone", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lktL8gUwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:chiseled_polished_blackstone", + "block_state_b64": "CgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWR2NJX2CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:deepslate_tiles", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZI/G/xYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cracked_deepslate_tiles", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkGwY6OgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:deepslate_bricks", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWSH4HDPCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cracked_deepslate_bricks", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZO9GPBQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:chiseled_deepslate", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZEqmI0EKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cobblestone", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkLm7RZwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:mossy_cobblestone", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lk/pYs1AoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cobbled_deepslate", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkNwzZ+AoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:smooth_stone", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZLkZICEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZB2wApMKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUHAGRlZmF1bHQAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZB7E+eQKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGULAGhlaXJvZ2x5cGhzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZFQnDaEKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUDAGN1dAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPO4A3IKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUGAHNtb290aAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWRhNYiFCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTqXJr1CgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlCwBoZWlyb2dseXBocwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTQRGkFCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlAwBjdXQAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTvAHWDCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBgBzbW9vdGgAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coal_block", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWRo+sR+CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:dried_kelp_block", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQQCCrvCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:gold_block", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWTDJGBcCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:iron_block", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWRf7AbICgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:copper_block", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:exposed_copper", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:weathered_copper", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:oxidized_copper", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:waxed_copper", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:waxed_exposed_copper", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cut_copper", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:exposed_cut_copper", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZMQhr0QKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:weathered_cut_copper", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk/0cYugoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:oxidized_cut_copper", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWQPdce7CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:waxed_cut_copper", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWQvuxx9CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:waxed_exposed_cut_copper", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZHy5HkcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:waxed_weathered_cut_copper", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkDyEDVQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:emerald_block", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:diamond_block", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWQQeQZXCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:lapis_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lktVy0BAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:raw_iron_block", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lknms1QAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:raw_copper_block", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWS1vGo/CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:raw_gold_block", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkLiQ5gQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:quartz_block", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZEupC1AKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:quartz_block", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZM97+l0KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:quartz_block", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZCbTfssKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQgAY2hpc2VsZWQICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:quartz_block", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZJss8V0KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQYAc21vb3RoCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:prismarine", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWRFIsoGCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:prismarine", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWTDNWOvCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBABkYXJrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:slime", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkfgfVzAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:honey_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lko+dyWgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:honeycomb_block", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKys4n4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:hay_block", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZKuQSloKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:bone_block", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWTWGacQCgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:nether_brick", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZMkmzloKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:red_nether_brick", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWRpdF0YCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:netherite_block", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZIz0mq0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:lodestone", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZEfgB4wKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:white_wool", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:light_gray_wool", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZIqZCYEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:gray_wool", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZFUs+HgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:black_wool", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRUbORcCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:brown_wool", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWRjT9j8CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_wool", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lktn9lcAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:orange_wool", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk+rqywwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:yellow_wool", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkkKBhXAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:lime_wool", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZG9b32kKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:green_wool", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWSssprwCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cyan_wool", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZK0hAbgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:light_blue_wool", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZL2oEugKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:blue_wool", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZPaLdFQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:purple_wool", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lklqASNQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:magenta_wool", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZI4UoDQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:pink_wool", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZOZRO6oKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:white_carpet", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:light_gray_carpet", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkQoAeUAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:gray_carpet", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkETF4WwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:black_carpet", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZFjmXtIKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:brown_carpet", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZHPjFuoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:red_carpet", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQuhI/KCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:orange_carpet", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWSyKV9OCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:yellow_carpet", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWT8nq+ECgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:lime_carpet", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkT+DS4woGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:green_carpet", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZBgwAvAKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cyan_carpet", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkKVppLgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:light_blue_carpet", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkjdeMiwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:blue_carpet", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkAovdPQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:purple_carpet", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWTqJqhjCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:magenta_carpet", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lk+tqsGAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:pink_carpet", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkrnBYDwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:white_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:light_gray_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkh8jVIwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:gray_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkSsqC1woGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:black_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZMWTC8EKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:brown_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZEDHKqwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:red_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSvcmwYCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:orange_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTHph0FCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:yellow_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWQZAI39CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:lime_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk2O8X0AoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:green_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZA0VfBMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cyan_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkmkn6uwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:light_blue_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkOmVSbgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:blue_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkS3b3RQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:purple_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWQXimEjCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:magenta_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkf9mxQwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:pink_concrete_powder", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lku2MivwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:white_concrete", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:light_gray_concrete", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWQISs02CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:gray_concrete", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQj8RHwCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:black_concrete", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lk2uiVDQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:brown_concrete", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkYf+xDQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_concrete", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZKwyx58KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:orange_concrete", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZMDQNz8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:yellow_concrete", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZMarutwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:lime_concrete", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTd47aoCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:green_concrete", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkmhZWUgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cyan_concrete", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQbi5b8CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:light_blue_concrete", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRL/GbSCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:blue_concrete", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWRMvFXNCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:purple_concrete", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCyKA5gKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:magenta_concrete", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWTc6ZOdCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:pink_concrete", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSszGgrCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:clay", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRmsb8nCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:hardened_clay", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:white_terracotta", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWSimKw+CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:light_gray_terracotta", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZH5qgOcKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:gray_terracotta", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZM1QDV0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:black_terracotta", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWRE3Ru/CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:brown_terracotta", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWQ/i0iNCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_terracotta", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lk8tTF8QoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:orange_terracotta", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lklmqmkAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:yellow_terracotta", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkaM/orAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:lime_terracotta", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZJt0XsgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:green_terracotta", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWQ8kGdHCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cyan_terracotta", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZIWPCzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:light_blue_terracotta", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZFHK1UsKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:blue_terracotta", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZF5mVZIKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:purple_terracotta", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkhtRDlwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:magenta_terracotta", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZN5SoakKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:pink_terracotta", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZDJWe4YKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:white_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:silver_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZPnxtJEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:gray_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQVU8eFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:black_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lk2Icb9AoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:brown_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkJy0jwgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZMYBJSEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:orange_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZN6+7TUKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:yellow_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZKRHXeoKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:lime_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSP7qQWCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:green_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkoF11kgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:cyan_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWT9buMtCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:light_blue_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWS5CszFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:blue_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWR+e22CCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:purple_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZLKbSE4KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:magenta_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQKf9UvCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:pink_glazed_terracotta", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTKzav2CgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:purpur_block", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZLD8ox4KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:purpur_block", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZPSAFFsKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:packed_mud", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTUb6LyCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:mud_bricks", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWSkBjaDCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:nether_wart_block", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkh3apIgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:warped_wart_block", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkMpKAbAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:shroomlight", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkLG2JiwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:crimson_nylium", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkuWpRDgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:warped_nylium", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWSu/kekCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:netherrack", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTAiTOACgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:basalt", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBPNSV4KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:polished_basalt", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZF+/mHwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:smooth_basalt", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTkb/oVCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:soul_soil", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZKc63SMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:dirt", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWQmkQtoCgYAc3RhdGVzCAkAZGlydF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:dirt", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWQId9pLCgYAc3RhdGVzCAkAZGlydF90eXBlBgBjb2Fyc2UAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:farmland", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkX618FQoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:grass", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmdyYXNzBAkAbmFtZV9oYXNosppASPWFlsUDCgBuZXR3b3JrX2lkhLLQkQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:grass_path", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWT7CcdzCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:podzol", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZPPS/GUKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:mycelium", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkLNPxXQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:mud", + "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZPIUlUkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lky8FPmgoGAHN0YXRlcwgKAHN0b25lX3R5cGUFAHN0b25lAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:iron_ore", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:gold_ore", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkNhvMfwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:diamond_ore", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/dChVAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:lapis_ore", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZMg+qK4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:redstone_ore", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZKDYvQoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coal_ore", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lk+R/aKAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:copper_ore", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQtIuCnCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:emerald_ore", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lknbkqCgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:quartz_ore", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSzN7nzCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:nether_gold_ore", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZNI9pDgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:ancient_debris", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkrSNjEAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:deepslate_iron_ore", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZFA0bz4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:deepslate_gold_ore", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZHQTfBUKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:deepslate_diamond_ore", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZHP6VzAKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:deepslate_lapis_ore", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWRKINzICgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:deepslate_redstone_ore", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWReBdYRCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:deepslate_emerald_ore", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZNeie6sKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:deepslate_coal_ore", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZD9TiygKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:deepslate_copper_ore", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkP23rgQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:gravel", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBpfI1sKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkbtgs0goGAHN0YXRlcwgKAHN0b25lX3R5cGUHAGdyYW5pdGUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk3sDePAoGAHN0YXRlcwgKAHN0b25lX3R5cGUHAGRpb3JpdGUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stone", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkYG+0YwoGAHN0YXRlcwgKAHN0b25lX3R5cGUIAGFuZGVzaXRlAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:blackstone", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWSrUryHCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:deepslate", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZOJoQjsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stone", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkREbyhwoGAHN0YXRlcwgKAHN0b25lX3R5cGUOAGdyYW5pdGVfc21vb3RoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk/EZ3UwoGAHN0YXRlcwgKAHN0b25lX3R5cGUOAGRpb3JpdGVfc21vb3RoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkmjeVIwoGAHN0YXRlcwgKAHN0b25lX3R5cGUPAGFuZGVzaXRlX3Ntb290aAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:polished_blackstone", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWR/Ho6oCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:polished_deepslate", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCPeQsEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:sand", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWTekU/mCgYAc3RhdGVzCAkAc2FuZF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:sand", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWSTgcqmCgYAc3RhdGVzCAkAc2FuZF90eXBlAwByZWQAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cactus", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZDeCERAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:oak_log", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stripped_oak_log", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWSYKjdrCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:spruce_log", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWRlFD8eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stripped_spruce_log", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWRQcEC3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:birch_log", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZBKN3VQKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stripped_birch_log", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZN0IONIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:jungle_log", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWQaziU/CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stripped_jungle_log", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWQvls0eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:acacia_log", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWRxEqe0CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stripped_acacia_log", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRg3IdRCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:dark_oak_log", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZPMM7LYKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stripped_dark_oak_log", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZDIzenIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:mangrove_log", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZG6DuYkKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stripped_mangrove_log", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZPtRn7UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cherry_log", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWS2sdXECgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stripped_cherry_log", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRjzoglCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:crimson_stem", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZKvzID0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stripped_crimson_stem", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZHrIqjIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:warped_stem", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkerWyMwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stripped_warped_stem", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIQ9vBAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSYGFlqCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlAwBvYWsAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSxnUzvCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlAwBvYWsAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWToyw4RCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBzcHJ1Y2UAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTL0a3ZCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBzcHJ1Y2UAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQV99vJCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBQBiaXJjaAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQYDJk1CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBQBiaXJjaAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSfH48gCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBqdW5nbGUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQ44auiCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBqdW5nbGUAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSogpPYCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBhY2FjaWEAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSD7hT1CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBhY2FjaWEAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQagb3gCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlCABkYXJrX29hawADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQdnWU+CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlCABkYXJrX29hawADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:mangrove_wood", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWTok1JCCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stripped_mangrove_wood", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWQLAX88CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cherry_wood", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkEALMfAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AQwAc3RyaXBwZWRfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stripped_cherry_wood", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkg5aVtQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:crimson_hyphae", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk+Tm5rQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stripped_crimson_hyphae", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkZAlUbgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:warped_hyphae", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRU2AIBCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:stripped_warped_hyphae", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSbrOPDCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:bamboo_block", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZCJAwn0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:stripped_bamboo_block", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZKuRbNEKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:leaves", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZOmqtzMKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlAwBvYWsBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:leaves", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZFMVNEQKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBgBzcHJ1Y2UBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:leaves", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZKCZEm8KBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBQBiaXJjaAEOAHBlcnNpc3RlbnRfYml0AAEKAHVwZGF0ZV9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:leaves", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZABprGgKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBgBqdW5nbGUBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:leaves2", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxlYXZlczIECQBuYW1lX2hhc2gy/bgrncY1ZAMKAG5ldHdvcmtfaWSFh3olCgYAc3RhdGVzCA0AbmV3X2xlYWZfdHlwZQYAYWNhY2lhAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:leaves2", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxlYXZlczIECQBuYW1lX2hhc2gy/bgrncY1ZAMKAG5ldHdvcmtfaWTvEAyeCgYAc3RhdGVzCA0AbmV3X2xlYWZfdHlwZQgAZGFya19vYWsBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:mangrove_leaves", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZPQxCZ8KBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cherry_leaves", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWR8bPpwCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:azalea_leaves", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTNB/9ECgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:azalea_leaves_flowered", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWQ7W4PyCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQmoOEvCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUDAG9hawADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQO8pAmCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQDHhokCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWTdQrcyCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWRCDffNCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWR0BRzPCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:mangrove_propagule", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZAIpvpYKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cherry_sapling", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkypakXQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:bee_nest", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkiXWLEAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wheat_seeds" + }, + { + "id": "minecraft:pumpkin_seeds" + }, + { + "id": "minecraft:melon_seeds" + }, + { + "id": "minecraft:beetroot_seeds" + }, + { + "id": "minecraft:torchflower_seeds" + }, + { + "id": "minecraft:pitcher_pod" + }, + { + "id": "minecraft:wheat" + }, + { + "id": "minecraft:beetroot" + }, + { + "id": "minecraft:potato" + }, + { + "id": "minecraft:poisonous_potato" + }, + { + "id": "minecraft:carrot" + }, + { + "id": "minecraft:golden_carrot" + }, + { + "id": "minecraft:apple" + }, + { + "id": "minecraft:golden_apple" + }, + { + "id": "minecraft:enchanted_golden_apple" + }, + { + "id": "minecraft:melon_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkC9rqygoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:melon_slice" + }, + { + "id": "minecraft:glistering_melon_slice" + }, + { + "id": "minecraft:sweet_berries" + }, + { + "id": "minecraft:glow_berries" + }, + { + "id": "minecraft:pumpkin", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWRFGA+xCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:carved_pumpkin", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkXNNn5QoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:lit_pumpkin", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lki8sU4AoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:honeycomb" + }, + { + "id": "minecraft:tallgrass", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZOh33DMKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAGZlcm4AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZMx1sfgKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAZmVybgEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:tallgrass", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZErptfIKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAHRhbGwAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZAbadmIKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQUAZ3Jhc3MBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:nether_sprouts" + }, + { + "id": "minecraft:fire_coral", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:brain_coral", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkrjAuhgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:bubble_coral", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZImIWy0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:tube_coral", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWRTfND5CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:horn_coral", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR+GGp8CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:dead_fire_coral", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZNMa7V4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:dead_brain_coral", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQkKzeiCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:dead_bubble_coral", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lka6w9DAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:dead_tube_coral", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZO3Z0ygKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:dead_horn_coral", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZBAN+eYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZOg7iS4KBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgMAcmVkAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZIDj8HMKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgQAcGluawMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZLCJP0kKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgYAcHVycGxlAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZFz2ly4KBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgQAYmx1ZQMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZE4TgnYKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgYAeWVsbG93AxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkdhLQzwoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkSi6srQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkGiGSzAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkmvZKOgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lknLw+4QoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:crimson_roots", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRLh5DXCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:warped_roots", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZNLgDnAKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:yellow_flower", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19mbG93ZXIECQBuYW1lX2hhc2jWbU1pF0OUGAMKAG5ldHdvcmtfaWQgO3hpCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWSqsqQGCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUFAHBvcHB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWTqDajjCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUGAG9yY2hpZAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWT5CjveCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUGAGFsbGl1bQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWTORIBJCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUJAGhvdXN0b25pYQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWTuNhmYCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUJAHR1bGlwX3JlZAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWT0O4nfCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUMAHR1bGlwX29yYW5nZQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWTqkthyCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGULAHR1bGlwX3doaXRlAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRMbBA7CgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUKAHR1bGlwX3BpbmsAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRexMAuCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUFAG94ZXllAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWQgs7BECgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUKAGNvcm5mbG93ZXIAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRvDuNbCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUSAGxpbHlfb2ZfdGhlX3ZhbGxleQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZOemRt4KBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQkAc3VuZmxvd2VyAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZOFugoEKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAc3lyaW5nYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZN4O+/gKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAcm9zZQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZI3w4GMKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAcGFlb25pYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:pitcher_plant", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWRnY76VCgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:pink_petals", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkNWneGgoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:wither_rose", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkATXLPwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:torchflower", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkI34O+AoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:white_dye" + }, + { + "id": "minecraft:light_gray_dye" + }, + { + "id": "minecraft:gray_dye" + }, + { + "id": "minecraft:black_dye" + }, + { + "id": "minecraft:brown_dye" + }, + { + "id": "minecraft:red_dye" + }, + { + "id": "minecraft:orange_dye" + }, + { + "id": "minecraft:yellow_dye" + }, + { + "id": "minecraft:lime_dye" + }, + { + "id": "minecraft:green_dye" + }, + { + "id": "minecraft:cyan_dye" + }, + { + "id": "minecraft:light_blue_dye" + }, + { + "id": "minecraft:blue_dye" + }, + { + "id": "minecraft:purple_dye" + }, + { + "id": "minecraft:magenta_dye" + }, + { + "id": "minecraft:pink_dye" + }, + { + "id": "minecraft:ink_sac" + }, + { + "id": "minecraft:glow_ink_sac" + }, + { + "id": "minecraft:cocoa_beans" + }, + { + "id": "minecraft:lapis_lazuli" + }, + { + "id": "minecraft:bone_meal" + }, + { + "id": "minecraft:vine", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnZpbmUECQBuYW1lX2hhc2j0Sj8/XeXOLAMKAG5ldHdvcmtfaWSUkDtbCgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:weeping_vines", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWQ8NHSJCgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:twisting_vines", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lk5kYVIQoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:waterlily", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZOOerp8KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:seagrass", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkd3lhEAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:kelp" + }, + { + "id": "minecraft:deadbush", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkVfnl+goGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:bamboo", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZIZv1nYKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:snow", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQ0zCeHCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:ice", + "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZOUMaQYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:packed_ice", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTr/ooaCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:blue_ice", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkxfsA8goGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:snow_layer", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWRCrIPcCgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:pointed_dripstone", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkbWrtYgoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:dripstone_block", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMZi2kwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:moss_carpet", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lkaGG3QwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:moss_block", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWT3JSbfCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:dirt_with_roots", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNCkwzoKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:hanging_roots", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRU4c2vCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:mangrove_roots", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lklA0AHgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:muddy_mangrove_roots", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkH0Oc4woGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:big_dripleaf", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMETsb8KBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:small_dripleaf_block", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lkozbVPwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:spore_blossom", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWSbbbgcCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:azalea", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZO/XZtQKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:flowering_azalea", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWQ3ij0VCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:glow_lichen", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkCh8lSAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:amethyst_block", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk8HtpzgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:budding_amethyst", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWTQYqfACgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:amethyst_cluster", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWSCPMPGCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:large_amethyst_bud", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZKkQxOcKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:medium_amethyst_bud", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWSYiP4gCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:small_amethyst_bud", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZGWzxrQKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:tuff", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:calcite", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:chicken" + }, + { + "id": "minecraft:porkchop" + }, + { + "id": "minecraft:beef" + }, + { + "id": "minecraft:mutton" + }, + { + "id": "minecraft:rabbit" + }, + { + "id": "minecraft:cod" + }, + { + "id": "minecraft:salmon" + }, + { + "id": "minecraft:tropical_fish" + }, + { + "id": "minecraft:pufferfish" + }, + { + "id": "minecraft:brown_mushroom", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX211c2hyb29tBAkAbmFtZV9oYXNonYw/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_mushroom", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCvWPYkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:crimson_fungus", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkD2NN0QoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:warped_fungus", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTkwS+rCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:brown_mushroom_block", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkdOMhDAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:red_mushroom_block", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZM+AyboKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:brown_mushroom_block", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkbdt3CAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw8AAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:brown_mushroom_block", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkSrMl9goGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cwAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:egg" + }, + { + "id": "minecraft:sugar_cane" + }, + { + "id": "minecraft:sugar" + }, + { + "id": "minecraft:rotten_flesh" + }, + { + "id": "minecraft:bone" + }, + { + "id": "minecraft:web", + "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZApt+jgKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:spider_eye" + }, + { + "id": "minecraft:mob_spawner", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkM1wTmgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkqXH7RgoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUFAHN0b25lAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkeIBb6QoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAGNvYmJsZXN0b25lAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkDZ2cFQoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAHN0b25lX2JyaWNrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkOR/cTAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGURAG1vc3N5X3N0b25lX2JyaWNrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkqdwlHAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUTAGNyYWNrZWRfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkFqqPggoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUUAGNoaXNlbGVkX3N0b25lX2JyaWNrAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:infested_deepslate", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZDa/624KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:dragon_egg", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWTgO1yRCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:turtle_egg", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWSIRNUhCgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sniffer_egg", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lk7yb/2QoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:frog_spawn", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRFzJudCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:pearlescent_froglight", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZJqYakAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:verdant_froglight", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkDIVnsQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:ochre_froglight", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZO2TD50KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:chicken_spawn_egg" + }, + { + "id": "minecraft:bee_spawn_egg" + }, + { + "id": "minecraft:cow_spawn_egg" + }, + { + "id": "minecraft:pig_spawn_egg" + }, + { + "id": "minecraft:sheep_spawn_egg" + }, + { + "id": "minecraft:wolf_spawn_egg" + }, + { + "id": "minecraft:polar_bear_spawn_egg" + }, + { + "id": "minecraft:ocelot_spawn_egg" + }, + { + "id": "minecraft:cat_spawn_egg" + }, + { + "id": "minecraft:mooshroom_spawn_egg" + }, + { + "id": "minecraft:bat_spawn_egg" + }, + { + "id": "minecraft:parrot_spawn_egg" + }, + { + "id": "minecraft:rabbit_spawn_egg" + }, + { + "id": "minecraft:llama_spawn_egg" + }, + { + "id": "minecraft:horse_spawn_egg" + }, + { + "id": "minecraft:donkey_spawn_egg" + }, + { + "id": "minecraft:mule_spawn_egg" + }, + { + "id": "minecraft:skeleton_horse_spawn_egg" + }, + { + "id": "minecraft:zombie_horse_spawn_egg" + }, + { + "id": "minecraft:tropical_fish_spawn_egg" + }, + { + "id": "minecraft:cod_spawn_egg" + }, + { + "id": "minecraft:pufferfish_spawn_egg" + }, + { + "id": "minecraft:salmon_spawn_egg" + }, + { + "id": "minecraft:dolphin_spawn_egg" + }, + { + "id": "minecraft:turtle_spawn_egg" + }, + { + "id": "minecraft:panda_spawn_egg" + }, + { + "id": "minecraft:fox_spawn_egg" + }, + { + "id": "minecraft:creeper_spawn_egg" + }, + { + "id": "minecraft:enderman_spawn_egg" + }, + { + "id": "minecraft:silverfish_spawn_egg" + }, + { + "id": "minecraft:skeleton_spawn_egg" + }, + { + "id": "minecraft:wither_skeleton_spawn_egg" + }, + { + "id": "minecraft:stray_spawn_egg" + }, + { + "id": "minecraft:slime_spawn_egg" + }, + { + "id": "minecraft:spider_spawn_egg" + }, + { + "id": "minecraft:zombie_spawn_egg" + }, + { + "id": "minecraft:zombie_pigman_spawn_egg" + }, + { + "id": "minecraft:husk_spawn_egg" + }, + { + "id": "minecraft:drowned_spawn_egg" + }, + { + "id": "minecraft:squid_spawn_egg" + }, + { + "id": "minecraft:glow_squid_spawn_egg" + }, + { + "id": "minecraft:cave_spider_spawn_egg" + }, + { + "id": "minecraft:witch_spawn_egg" + }, + { + "id": "minecraft:guardian_spawn_egg" + }, + { + "id": "minecraft:elder_guardian_spawn_egg" + }, + { + "id": "minecraft:endermite_spawn_egg" + }, + { + "id": "minecraft:magma_cube_spawn_egg" + }, + { + "id": "minecraft:strider_spawn_egg" + }, + { + "id": "minecraft:hoglin_spawn_egg" + }, + { + "id": "minecraft:piglin_spawn_egg" + }, + { + "id": "minecraft:zoglin_spawn_egg" + }, + { + "id": "minecraft:piglin_brute_spawn_egg" + }, + { + "id": "minecraft:goat_spawn_egg" + }, + { + "id": "minecraft:axolotl_spawn_egg" + }, + { + "id": "minecraft:warden_spawn_egg" + }, + { + "id": "minecraft:allay_spawn_egg" + }, + { + "id": "minecraft:frog_spawn_egg" + }, + { + "id": "minecraft:tadpole_spawn_egg" + }, + { + "id": "minecraft:trader_llama_spawn_egg" + }, + { + "id": "minecraft:camel_spawn_egg" + }, + { + "id": "minecraft:ghast_spawn_egg" + }, + { + "id": "minecraft:blaze_spawn_egg" + }, + { + "id": "minecraft:shulker_spawn_egg" + }, + { + "id": "minecraft:vindicator_spawn_egg" + }, + { + "id": "minecraft:evoker_spawn_egg" + }, + { + "id": "minecraft:vex_spawn_egg" + }, + { + "id": "minecraft:villager_spawn_egg" + }, + { + "id": "minecraft:wandering_trader_spawn_egg" + }, + { + "id": "minecraft:zombie_villager_spawn_egg" + }, + { + "id": "minecraft:phantom_spawn_egg" + }, + { + "id": "minecraft:pillager_spawn_egg" + }, + { + "id": "minecraft:ravager_spawn_egg" + }, + { + "id": "minecraft:iron_golem_spawn_egg" + }, + { + "id": "minecraft:snow_golem_spawn_egg" + }, + { + "id": "minecraft:sniffer_spawn_egg" + }, + { + "id": "minecraft:obsidian", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkuqnPpQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:crying_obsidian", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZCjbPV4KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:bedrock", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWT7fKz1CgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:soul_sand", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBQSHrMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:magma", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkyfWAZgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:nether_wart" + }, + { + "id": "minecraft:end_stone", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZFeFQ7UKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:chorus_flower", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWRnd1ZWCgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:chorus_plant", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZA3uVqMKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:chorus_fruit" + }, + { + "id": "minecraft:popped_chorus_fruit" + }, + { + "id": "minecraft:sponge", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZF01rO0KBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAZHJ5AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:sponge", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZPiOc4QKBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAd2V0AAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkGnlaAwoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkSnHuagoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkmkHyegoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkdpUDxgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkYNWvYgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkZSxBQgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lklSTVqQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lk5fTYuQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAEAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkwUjqBAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAEAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkq4iWoQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAEAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:sculk", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sculk_vein", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSUfn1XCgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:sculk_catalyst", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkMJ2n/woGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sculk_shrieker", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkxapoNAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sculk_sensor", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZLj2WPcKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:calibrated_sculk_sensor", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkwOx3QQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:reinforced_deepslate", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkHIt+aQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:leather_helmet" + }, + { + "id": "minecraft:chainmail_helmet" + }, + { + "id": "minecraft:iron_helmet" + }, + { + "id": "minecraft:golden_helmet" + }, + { + "id": "minecraft:diamond_helmet" + }, + { + "id": "minecraft:netherite_helmet" + }, + { + "id": "minecraft:leather_chestplate" + }, + { + "id": "minecraft:chainmail_chestplate" + }, + { + "id": "minecraft:iron_chestplate" + }, + { + "id": "minecraft:golden_chestplate" + }, + { + "id": "minecraft:diamond_chestplate" + }, + { + "id": "minecraft:netherite_chestplate" + }, + { + "id": "minecraft:leather_leggings" + }, + { + "id": "minecraft:chainmail_leggings" + }, + { + "id": "minecraft:iron_leggings" + }, + { + "id": "minecraft:golden_leggings" + }, + { + "id": "minecraft:diamond_leggings" + }, + { + "id": "minecraft:netherite_leggings" + }, + { + "id": "minecraft:leather_boots" + }, + { + "id": "minecraft:chainmail_boots" + }, + { + "id": "minecraft:iron_boots" + }, + { + "id": "minecraft:golden_boots" + }, + { + "id": "minecraft:diamond_boots" + }, + { + "id": "minecraft:netherite_boots" + }, + { + "id": "minecraft:wooden_sword" + }, + { + "id": "minecraft:stone_sword" + }, + { + "id": "minecraft:iron_sword" + }, + { + "id": "minecraft:golden_sword" + }, + { + "id": "minecraft:diamond_sword" + }, + { + "id": "minecraft:netherite_sword" + }, + { + "id": "minecraft:wooden_axe" + }, + { + "id": "minecraft:stone_axe" + }, + { + "id": "minecraft:iron_axe" + }, + { + "id": "minecraft:golden_axe" + }, + { + "id": "minecraft:diamond_axe" + }, + { + "id": "minecraft:netherite_axe" + }, + { + "id": "minecraft:wooden_pickaxe" + }, + { + "id": "minecraft:stone_pickaxe" + }, + { + "id": "minecraft:iron_pickaxe" + }, + { + "id": "minecraft:golden_pickaxe" + }, + { + "id": "minecraft:diamond_pickaxe" + }, + { + "id": "minecraft:netherite_pickaxe" + }, + { + "id": "minecraft:wooden_shovel" + }, + { + "id": "minecraft:stone_shovel" + }, + { + "id": "minecraft:iron_shovel" + }, + { + "id": "minecraft:golden_shovel" + }, + { + "id": "minecraft:diamond_shovel" + }, + { + "id": "minecraft:netherite_shovel" + }, + { + "id": "minecraft:wooden_hoe" + }, + { + "id": "minecraft:stone_hoe" + }, + { + "id": "minecraft:iron_hoe" + }, + { + "id": "minecraft:golden_hoe" + }, + { + "id": "minecraft:diamond_hoe" + }, + { + "id": "minecraft:netherite_hoe" + }, + { + "id": "minecraft:bow" + }, + { + "id": "minecraft:crossbow" + }, + { + "id": "minecraft:arrow" + }, + { + "id": "minecraft:arrow", + "damage": 6 + }, + { + "id": "minecraft:arrow", + "damage": 7 + }, + { + "id": "minecraft:arrow", + "damage": 8 + }, + { + "id": "minecraft:arrow", + "damage": 9 + }, + { + "id": "minecraft:arrow", + "damage": 10 + }, + { + "id": "minecraft:arrow", + "damage": 11 + }, + { + "id": "minecraft:arrow", + "damage": 12 + }, + { + "id": "minecraft:arrow", + "damage": 13 + }, + { + "id": "minecraft:arrow", + "damage": 14 + }, + { + "id": "minecraft:arrow", + "damage": 15 + }, + { + "id": "minecraft:arrow", + "damage": 16 + }, + { + "id": "minecraft:arrow", + "damage": 17 + }, + { + "id": "minecraft:arrow", + "damage": 18 + }, + { + "id": "minecraft:arrow", + "damage": 19 + }, + { + "id": "minecraft:arrow", + "damage": 20 + }, + { + "id": "minecraft:arrow", + "damage": 21 + }, + { + "id": "minecraft:arrow", + "damage": 22 + }, + { + "id": "minecraft:arrow", + "damage": 23 + }, + { + "id": "minecraft:arrow", + "damage": 24 + }, + { + "id": "minecraft:arrow", + "damage": 25 + }, + { + "id": "minecraft:arrow", + "damage": 26 + }, + { + "id": "minecraft:arrow", + "damage": 27 + }, + { + "id": "minecraft:arrow", + "damage": 28 + }, + { + "id": "minecraft:arrow", + "damage": 29 + }, + { + "id": "minecraft:arrow", + "damage": 30 + }, + { + "id": "minecraft:arrow", + "damage": 31 + }, + { + "id": "minecraft:arrow", + "damage": 32 + }, + { + "id": "minecraft:arrow", + "damage": 33 + }, + { + "id": "minecraft:arrow", + "damage": 34 + }, + { + "id": "minecraft:arrow", + "damage": 35 + }, + { + "id": "minecraft:arrow", + "damage": 36 + }, + { + "id": "minecraft:arrow", + "damage": 37 + }, + { + "id": "minecraft:arrow", + "damage": 38 + }, + { + "id": "minecraft:arrow", + "damage": 39 + }, + { + "id": "minecraft:arrow", + "damage": 40 + }, + { + "id": "minecraft:arrow", + "damage": 41 + }, + { + "id": "minecraft:arrow", + "damage": 42 + }, + { + "id": "minecraft:arrow", + "damage": 43 + }, + { + "id": "minecraft:shield" + }, + { + "id": "minecraft:cooked_chicken" + }, + { + "id": "minecraft:cooked_porkchop" + }, + { + "id": "minecraft:cooked_beef" + }, + { + "id": "minecraft:cooked_mutton" + }, + { + "id": "minecraft:cooked_rabbit" + }, + { + "id": "minecraft:cooked_cod" + }, + { + "id": "minecraft:cooked_salmon" + }, + { + "id": "minecraft:bread" + }, + { + "id": "minecraft:mushroom_stew" + }, + { + "id": "minecraft:beetroot_soup" + }, + { + "id": "minecraft:rabbit_stew" + }, + { + "id": "minecraft:baked_potato" + }, + { + "id": "minecraft:cookie" + }, + { + "id": "minecraft:pumpkin_pie" + }, + { + "id": "minecraft:cake" + }, + { + "id": "minecraft:dried_kelp" + }, + { + "id": "minecraft:fishing_rod" + }, + { + "id": "minecraft:carrot_on_a_stick" + }, + { + "id": "minecraft:warped_fungus_on_a_stick" + }, + { + "id": "minecraft:snowball" + }, + { + "id": "minecraft:shears" + }, + { + "id": "minecraft:flint_and_steel" + }, + { + "id": "minecraft:lead" + }, + { + "id": "minecraft:clock" + }, + { + "id": "minecraft:compass" + }, + { + "id": "minecraft:recovery_compass" + }, + { + "id": "minecraft:goat_horn" + }, + { + "id": "minecraft:goat_horn", + "damage": 1 + }, + { + "id": "minecraft:goat_horn", + "damage": 2 + }, + { + "id": "minecraft:goat_horn", + "damage": 3 + }, + { + "id": "minecraft:goat_horn", + "damage": 4 + }, + { + "id": "minecraft:goat_horn", + "damage": 5 + }, + { + "id": "minecraft:goat_horn", + "damage": 6 + }, + { + "id": "minecraft:goat_horn", + "damage": 7 + }, + { + "id": "minecraft:empty_map" + }, + { + "id": "minecraft:empty_map", + "damage": 2 + }, + { + "id": "minecraft:saddle" + }, + { + "id": "minecraft:leather_horse_armor" + }, + { + "id": "minecraft:iron_horse_armor" + }, + { + "id": "minecraft:golden_horse_armor" + }, + { + "id": "minecraft:diamond_horse_armor" + }, + { + "id": "minecraft:trident" + }, + { + "id": "minecraft:turtle_helmet" + }, + { + "id": "minecraft:elytra" + }, + { + "id": "minecraft:totem_of_undying" + }, + { + "id": "minecraft:glass_bottle" + }, + { + "id": "minecraft:experience_bottle" + }, + { + "id": "minecraft:potion" + }, + { + "id": "minecraft:potion", + "damage": 1 + }, + { + "id": "minecraft:potion", + "damage": 2 + }, + { + "id": "minecraft:potion", + "damage": 3 + }, + { + "id": "minecraft:potion", + "damage": 4 + }, + { + "id": "minecraft:potion", + "damage": 5 + }, + { + "id": "minecraft:potion", + "damage": 6 + }, + { + "id": "minecraft:potion", + "damage": 7 + }, + { + "id": "minecraft:potion", + "damage": 8 + }, + { + "id": "minecraft:potion", + "damage": 9 + }, + { + "id": "minecraft:potion", + "damage": 10 + }, + { + "id": "minecraft:potion", + "damage": 11 + }, + { + "id": "minecraft:potion", + "damage": 12 + }, + { + "id": "minecraft:potion", + "damage": 13 + }, + { + "id": "minecraft:potion", + "damage": 14 + }, + { + "id": "minecraft:potion", + "damage": 15 + }, + { + "id": "minecraft:potion", + "damage": 16 + }, + { + "id": "minecraft:potion", + "damage": 17 + }, + { + "id": "minecraft:potion", + "damage": 18 + }, + { + "id": "minecraft:potion", + "damage": 19 + }, + { + "id": "minecraft:potion", + "damage": 20 + }, + { + "id": "minecraft:potion", + "damage": 21 + }, + { + "id": "minecraft:potion", + "damage": 22 + }, + { + "id": "minecraft:potion", + "damage": 23 + }, + { + "id": "minecraft:potion", + "damage": 24 + }, + { + "id": "minecraft:potion", + "damage": 25 + }, + { + "id": "minecraft:potion", + "damage": 26 + }, + { + "id": "minecraft:potion", + "damage": 27 + }, + { + "id": "minecraft:potion", + "damage": 28 + }, + { + "id": "minecraft:potion", + "damage": 29 + }, + { + "id": "minecraft:potion", + "damage": 30 + }, + { + "id": "minecraft:potion", + "damage": 31 + }, + { + "id": "minecraft:potion", + "damage": 32 + }, + { + "id": "minecraft:potion", + "damage": 33 + }, + { + "id": "minecraft:potion", + "damage": 34 + }, + { + "id": "minecraft:potion", + "damage": 35 + }, + { + "id": "minecraft:potion", + "damage": 36 + }, + { + "id": "minecraft:potion", + "damage": 37 + }, + { + "id": "minecraft:potion", + "damage": 38 + }, + { + "id": "minecraft:potion", + "damage": 39 + }, + { + "id": "minecraft:potion", + "damage": 40 + }, + { + "id": "minecraft:potion", + "damage": 41 + }, + { + "id": "minecraft:potion", + "damage": 42 + }, + { + "id": "minecraft:splash_potion" + }, + { + "id": "minecraft:splash_potion", + "damage": 1 + }, + { + "id": "minecraft:splash_potion", + "damage": 2 + }, + { + "id": "minecraft:splash_potion", + "damage": 3 + }, + { + "id": "minecraft:splash_potion", + "damage": 4 + }, + { + "id": "minecraft:splash_potion", + "damage": 5 + }, + { + "id": "minecraft:splash_potion", + "damage": 6 + }, + { + "id": "minecraft:splash_potion", + "damage": 7 + }, + { + "id": "minecraft:splash_potion", + "damage": 8 + }, + { + "id": "minecraft:splash_potion", + "damage": 9 + }, + { + "id": "minecraft:splash_potion", + "damage": 10 + }, + { + "id": "minecraft:splash_potion", + "damage": 11 + }, + { + "id": "minecraft:splash_potion", + "damage": 12 + }, + { + "id": "minecraft:splash_potion", + "damage": 13 + }, + { + "id": "minecraft:splash_potion", + "damage": 14 + }, + { + "id": "minecraft:splash_potion", + "damage": 15 + }, + { + "id": "minecraft:splash_potion", + "damage": 16 + }, + { + "id": "minecraft:splash_potion", + "damage": 17 + }, + { + "id": "minecraft:splash_potion", + "damage": 18 + }, + { + "id": "minecraft:splash_potion", + "damage": 19 + }, + { + "id": "minecraft:splash_potion", + "damage": 20 + }, + { + "id": "minecraft:splash_potion", + "damage": 21 + }, + { + "id": "minecraft:splash_potion", + "damage": 22 + }, + { + "id": "minecraft:splash_potion", + "damage": 23 + }, + { + "id": "minecraft:splash_potion", + "damage": 24 + }, + { + "id": "minecraft:splash_potion", + "damage": 25 + }, + { + "id": "minecraft:splash_potion", + "damage": 26 + }, + { + "id": "minecraft:splash_potion", + "damage": 27 + }, + { + "id": "minecraft:splash_potion", + "damage": 28 + }, + { + "id": "minecraft:splash_potion", + "damage": 29 + }, + { + "id": "minecraft:splash_potion", + "damage": 30 + }, + { + "id": "minecraft:splash_potion", + "damage": 31 + }, + { + "id": "minecraft:splash_potion", + "damage": 32 + }, + { + "id": "minecraft:splash_potion", + "damage": 33 + }, + { + "id": "minecraft:splash_potion", + "damage": 34 + }, + { + "id": "minecraft:splash_potion", + "damage": 35 + }, + { + "id": "minecraft:splash_potion", + "damage": 36 + }, + { + "id": "minecraft:splash_potion", + "damage": 37 + }, + { + "id": "minecraft:splash_potion", + "damage": 38 + }, + { + "id": "minecraft:splash_potion", + "damage": 39 + }, + { + "id": "minecraft:splash_potion", + "damage": 40 + }, + { + "id": "minecraft:splash_potion", + "damage": 41 + }, + { + "id": "minecraft:splash_potion", + "damage": 42 + }, + { + "id": "minecraft:lingering_potion" + }, + { + "id": "minecraft:lingering_potion", + "damage": 1 + }, + { + "id": "minecraft:lingering_potion", + "damage": 2 + }, + { + "id": "minecraft:lingering_potion", + "damage": 3 + }, + { + "id": "minecraft:lingering_potion", + "damage": 4 + }, + { + "id": "minecraft:lingering_potion", + "damage": 5 + }, + { + "id": "minecraft:lingering_potion", + "damage": 6 + }, + { + "id": "minecraft:lingering_potion", + "damage": 7 + }, + { + "id": "minecraft:lingering_potion", + "damage": 8 + }, + { + "id": "minecraft:lingering_potion", + "damage": 9 + }, + { + "id": "minecraft:lingering_potion", + "damage": 10 + }, + { + "id": "minecraft:lingering_potion", + "damage": 11 + }, + { + "id": "minecraft:lingering_potion", + "damage": 12 + }, + { + "id": "minecraft:lingering_potion", + "damage": 13 + }, + { + "id": "minecraft:lingering_potion", + "damage": 14 + }, + { + "id": "minecraft:lingering_potion", + "damage": 15 + }, + { + "id": "minecraft:lingering_potion", + "damage": 16 + }, + { + "id": "minecraft:lingering_potion", + "damage": 17 + }, + { + "id": "minecraft:lingering_potion", + "damage": 18 + }, + { + "id": "minecraft:lingering_potion", + "damage": 19 + }, + { + "id": "minecraft:lingering_potion", + "damage": 20 + }, + { + "id": "minecraft:lingering_potion", + "damage": 21 + }, + { + "id": "minecraft:lingering_potion", + "damage": 22 + }, + { + "id": "minecraft:lingering_potion", + "damage": 23 + }, + { + "id": "minecraft:lingering_potion", + "damage": 24 + }, + { + "id": "minecraft:lingering_potion", + "damage": 25 + }, + { + "id": "minecraft:lingering_potion", + "damage": 26 + }, + { + "id": "minecraft:lingering_potion", + "damage": 27 + }, + { + "id": "minecraft:lingering_potion", + "damage": 28 + }, + { + "id": "minecraft:lingering_potion", + "damage": 29 + }, + { + "id": "minecraft:lingering_potion", + "damage": 30 + }, + { + "id": "minecraft:lingering_potion", + "damage": 31 + }, + { + "id": "minecraft:lingering_potion", + "damage": 32 + }, + { + "id": "minecraft:lingering_potion", + "damage": 33 + }, + { + "id": "minecraft:lingering_potion", + "damage": 34 + }, + { + "id": "minecraft:lingering_potion", + "damage": 35 + }, + { + "id": "minecraft:lingering_potion", + "damage": 36 + }, + { + "id": "minecraft:lingering_potion", + "damage": 37 + }, + { + "id": "minecraft:lingering_potion", + "damage": 38 + }, + { + "id": "minecraft:lingering_potion", + "damage": 39 + }, + { + "id": "minecraft:lingering_potion", + "damage": 40 + }, + { + "id": "minecraft:lingering_potion", + "damage": 41 + }, + { + "id": "minecraft:lingering_potion", + "damage": 42 + }, + { + "id": "minecraft:spyglass" + }, + { + "id": "minecraft:brush" + }, + { + "id": "minecraft:stick" + }, + { + "id": "minecraft:bed" + }, + { + "id": "minecraft:bed", + "damage": 8 + }, + { + "id": "minecraft:bed", + "damage": 7 + }, + { + "id": "minecraft:bed", + "damage": 15 + }, + { + "id": "minecraft:bed", + "damage": 12 + }, + { + "id": "minecraft:bed", + "damage": 14 + }, + { + "id": "minecraft:bed", + "damage": 1 + }, + { + "id": "minecraft:bed", + "damage": 4 + }, + { + "id": "minecraft:bed", + "damage": 5 + }, + { + "id": "minecraft:bed", + "damage": 13 + }, + { + "id": "minecraft:bed", + "damage": 9 + }, + { + "id": "minecraft:bed", + "damage": 3 + }, + { + "id": "minecraft:bed", + "damage": 11 + }, + { + "id": "minecraft:bed", + "damage": 10 + }, + { + "id": "minecraft:bed", + "damage": 2 + }, + { + "id": "minecraft:bed", + "damage": 6 + }, + { + "id": "minecraft:torch", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lk+BwwuQoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:soul_torch", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWShbFILCgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sea_pickle", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWSINWQyCgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:lantern", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWRkjQvzCgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:soul_lantern", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZGfoP8cKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:candle", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:white_candle", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZKN1mmgKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:orange_candle", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWSfVz82CgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:magenta_candle", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lk9xGNkQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:light_blue_candle", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk2m1y8goGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:yellow_candle", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWR9LTmpCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:lime_candle", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lkIAUu6QoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:pink_candle", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lk23Rn5AoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:gray_candle", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lk3trRCAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:light_gray_candle", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkb6DOegoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cyan_candle", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkZoIQOQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:purple_candle", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLI2BCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:blue_candle", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkrxrjQAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:brown_candle", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZKSkBXYKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:green_candle", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZBkznDsKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:red_candle", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWRbb88GCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:black_candle", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZNnOnuEKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:crafting_table", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkwCxwaAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cartography_table", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkI6FzMwoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:fletching_table", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJ2mW0oKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:smithing_table", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lkXWMBzQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:beehive", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWR/idcaCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:suspicious_sand", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZKnkaIAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:suspicious_gravel", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkvIEJAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:campfire" + }, + { + "id": "minecraft:soul_campfire" + }, + { + "id": "minecraft:furnace", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRZxnDOCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:blast_furnace", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTcEbV/CgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:smoker", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZGWswMwKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:respawn_anchor", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkmhMcaQoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:brewing_stand" + }, + { + "id": "minecraft:anvil", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lk8Z3VowoGAHN0YXRlcwgGAGRhbWFnZQkAdW5kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:anvil", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkpiv8BAoGAHN0YXRlcwgGAGRhbWFnZRAAc2xpZ2h0bHlfZGFtYWdlZAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:anvil", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkFu+pdwoGAHN0YXRlcwgGAGRhbWFnZQwAdmVyeV9kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:grindstone", + "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWS4Es07CgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:enchanting_table", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRliFFJCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:bookshelf", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZBcWwIwKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:chiseled_bookshelf", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZIprt5IKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:lectern", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR4JfDHCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cauldron" + }, + { + "id": "minecraft:composter", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHIL6i4KBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:chest", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkDkOFvAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:trapped_chest", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWTjJWYxCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAbm9ydGgAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:ender_chest", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkx4jiSQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:barrel", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZPnxzgsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:undyed_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:white_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkjrET6goGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:light_gray_shulker_box", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWSCVJv0CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:gray_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWS3WMsWCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:black_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkXHztNAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:brown_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkaXxpYQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:red_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZNrf+icKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:orange_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGoO05gKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:yellow_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZBCBSiYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:lime_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWRJeKqqCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:green_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkzJiohQoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:cyan_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTHeliECgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:light_blue_shulker_box", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWQXD8U0CgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:blue_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWTO4PJaCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:purple_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZFK25GAKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:magenta_shulker_box", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTyyudTCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:pink_shulker_box", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQOEGXjCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:armor_stand" + }, + { + "id": "minecraft:noteblock", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZH1U5QkKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:jukebox", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWSmR7JfCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:music_disc_13" + }, + { + "id": "minecraft:music_disc_cat" + }, + { + "id": "minecraft:music_disc_blocks" + }, + { + "id": "minecraft:music_disc_chirp" + }, + { + "id": "minecraft:music_disc_far" + }, + { + "id": "minecraft:music_disc_mall" + }, + { + "id": "minecraft:music_disc_mellohi" + }, + { + "id": "minecraft:music_disc_stal" + }, + { + "id": "minecraft:music_disc_strad" + }, + { + "id": "minecraft:music_disc_ward" + }, + { + "id": "minecraft:music_disc_11" + }, + { + "id": "minecraft:music_disc_wait" + }, + { + "id": "minecraft:music_disc_otherside" + }, + { + "id": "minecraft:music_disc_5" + }, + { + "id": "minecraft:music_disc_pigstep" + }, + { + "id": "minecraft:music_disc_relic" + }, + { + "id": "minecraft:disc_fragment_5" + }, + { + "id": "minecraft:glowstone_dust" + }, + { + "id": "minecraft:glowstone", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZGT7WYYKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:redstone_lamp", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWRvNPwnCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:sea_lantern", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lk1PPVyAoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:oak_sign" + }, + { + "id": "minecraft:spruce_sign" + }, + { + "id": "minecraft:birch_sign" + }, + { + "id": "minecraft:jungle_sign" + }, + { + "id": "minecraft:acacia_sign" + }, + { + "id": "minecraft:dark_oak_sign" + }, + { + "id": "minecraft:mangrove_sign" + }, + { + "id": "minecraft:cherry_sign" + }, + { + "id": "minecraft:bamboo_sign" + }, + { + "id": "minecraft:crimson_sign" + }, + { + "id": "minecraft:warped_sign" + }, + { + "id": "minecraft:oak_hanging_sign" + }, + { + "id": "minecraft:spruce_hanging_sign" + }, + { + "id": "minecraft:birch_hanging_sign" + }, + { + "id": "minecraft:jungle_hanging_sign" + }, + { + "id": "minecraft:acacia_hanging_sign" + }, + { + "id": "minecraft:dark_oak_hanging_sign" + }, + { + "id": "minecraft:mangrove_hanging_sign" + }, + { + "id": "minecraft:cherry_hanging_sign" + }, + { + "id": "minecraft:bamboo_hanging_sign" + }, + { + "id": "minecraft:crimson_hanging_sign" + }, + { + "id": "minecraft:warped_hanging_sign" + }, + { + "id": "minecraft:painting" + }, + { + "id": "minecraft:frame" + }, + { + "id": "minecraft:glow_frame" + }, + { + "id": "minecraft:honey_bottle" + }, + { + "id": "minecraft:flower_pot" + }, + { + "id": "minecraft:bowl" + }, + { + "id": "minecraft:bucket" + }, + { + "id": "minecraft:milk_bucket" + }, + { + "id": "minecraft:water_bucket" + }, + { + "id": "minecraft:lava_bucket" + }, + { + "id": "minecraft:cod_bucket" + }, + { + "id": "minecraft:salmon_bucket" + }, + { + "id": "minecraft:tropical_fish_bucket" + }, + { + "id": "minecraft:pufferfish_bucket" + }, + { + "id": "minecraft:powder_snow_bucket" + }, + { + "id": "minecraft:axolotl_bucket" + }, + { + "id": "minecraft:tadpole_bucket" + }, + { + "id": "minecraft:skull", + "damage": 3 + }, + { + "id": "minecraft:skull", + "damage": 2 + }, + { + "id": "minecraft:skull", + "damage": 4 + }, + { + "id": "minecraft:skull", + "damage": 5 + }, + { + "id": "minecraft:skull" + }, + { + "id": "minecraft:skull", + "damage": 1 + }, + { + "id": "minecraft:skull", + "damage": 6 + }, + { + "id": "minecraft:beacon", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZF8jfiEKBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:bell", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWT7zhOoCgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:conduit", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWTWcBVnCgYAc3RhdGVzAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stonecutter_block", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lkWS4RjAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:end_portal_frame", + "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWRbGHf8CgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:coal" + }, + { + "id": "minecraft:charcoal" + }, + { + "id": "minecraft:diamond" + }, + { + "id": "minecraft:iron_nugget" + }, + { + "id": "minecraft:raw_iron" + }, + { + "id": "minecraft:raw_gold" + }, + { + "id": "minecraft:raw_copper" + }, + { + "id": "minecraft:copper_ingot" + }, + { + "id": "minecraft:iron_ingot" + }, + { + "id": "minecraft:netherite_scrap" + }, + { + "id": "minecraft:netherite_ingot" + }, + { + "id": "minecraft:gold_nugget" + }, + { + "id": "minecraft:gold_ingot" + }, + { + "id": "minecraft:emerald" + }, + { + "id": "minecraft:quartz" + }, + { + "id": "minecraft:clay_ball" + }, + { + "id": "minecraft:brick" + }, + { + "id": "minecraft:netherbrick" + }, + { + "id": "minecraft:prismarine_shard" + }, + { + "id": "minecraft:amethyst_shard" + }, + { + "id": "minecraft:prismarine_crystals" + }, + { + "id": "minecraft:nautilus_shell" + }, + { + "id": "minecraft:heart_of_the_sea" + }, + { + "id": "minecraft:scute" + }, + { + "id": "minecraft:phantom_membrane" + }, + { + "id": "minecraft:string" + }, + { + "id": "minecraft:feather" + }, + { + "id": "minecraft:flint" + }, + { + "id": "minecraft:gunpowder" + }, + { + "id": "minecraft:leather" + }, + { + "id": "minecraft:rabbit_hide" + }, + { + "id": "minecraft:rabbit_foot" + }, + { + "id": "minecraft:fire_charge" + }, + { + "id": "minecraft:blaze_rod" + }, + { + "id": "minecraft:blaze_powder" + }, + { + "id": "minecraft:magma_cream" + }, + { + "id": "minecraft:fermented_spider_eye" + }, + { + "id": "minecraft:echo_shard" + }, + { + "id": "minecraft:dragon_breath" + }, + { + "id": "minecraft:shulker_shell" + }, + { + "id": "minecraft:ghast_tear" + }, + { + "id": "minecraft:slime_ball" + }, + { + "id": "minecraft:ender_pearl" + }, + { + "id": "minecraft:ender_eye" + }, + { + "id": "minecraft:nether_star" + }, + { + "id": "minecraft:end_rod", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmVuZF9yb2QECQBuYW1lX2hhc2jx/q5cEA0hmQMKAG5ldHdvcmtfaWQ2eM8kCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:lightning_rod", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWRLuHyACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:end_crystal" + }, + { + "id": "minecraft:paper" + }, + { + "id": "minecraft:book" + }, + { + "id": "minecraft:writable_book" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQIAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQQAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQVAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQWAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQaAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQbAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQcAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQgAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQhAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:oak_boat" + }, + { + "id": "minecraft:spruce_boat" + }, + { + "id": "minecraft:birch_boat" + }, + { + "id": "minecraft:jungle_boat" + }, + { + "id": "minecraft:acacia_boat" + }, + { + "id": "minecraft:dark_oak_boat" + }, + { + "id": "minecraft:mangrove_boat" + }, + { + "id": "minecraft:cherry_boat" + }, + { + "id": "minecraft:bamboo_raft" + }, + { + "id": "minecraft:oak_chest_boat" + }, + { + "id": "minecraft:spruce_chest_boat" + }, + { + "id": "minecraft:birch_chest_boat" + }, + { + "id": "minecraft:jungle_chest_boat" + }, + { + "id": "minecraft:acacia_chest_boat" + }, + { + "id": "minecraft:dark_oak_chest_boat" + }, + { + "id": "minecraft:mangrove_chest_boat" + }, + { + "id": "minecraft:cherry_chest_boat" + }, + { + "id": "minecraft:bamboo_chest_raft" + }, + { + "id": "minecraft:rail", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:golden_rail", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkfAcxLwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:detector_rail", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWRVW/aICgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:activator_rail", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkZfckmwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:minecart" + }, + { + "id": "minecraft:chest_minecart" + }, + { + "id": "minecraft:hopper_minecart" + }, + { + "id": "minecraft:tnt_minecart" + }, + { + "id": "minecraft:redstone" + }, + { + "id": "minecraft:redstone_block", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lklayOHgoGAHN0YXRlcwADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:redstone_torch", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkuHz7yAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:lever", + "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkEF/GuAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wooden_button", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:spruce_button", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTkUIGuCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:birch_button", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZGWp3yoKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:jungle_button", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWT9fImWCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:acacia_button", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRQnxIJCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:dark_oak_button", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZN5vAmIKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:mangrove_button", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZAFEGQ0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cherry_button", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRJ1irQCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:bamboo_button", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSa9w4/CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_button", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZMw+aC0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:crimson_button", + "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lk+n1vyQoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:warped_button", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWTnHnk1CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:polished_blackstone_button", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkDtQ95woGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:tripwire_hook", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSy+1KJCgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:wooden_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:spruce_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZLQMCw0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:birch_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkH0G97AoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:jungle_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZLdPBSAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:acacia_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZIDdI18KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:dark_oak_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkKpi8rAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:mangrove_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lkuwWDyQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:cherry_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZPNT+r0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:bamboo_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZIZ8XnYKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:crimson_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRmV18LCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:warped_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZJVRoIcKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:stone_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkjDydwQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:light_weighted_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkrr2AjgoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:heavy_weighted_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkFxVKuQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:polished_blackstone_pressure_plate", + "block_state_b64": "CgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWTaSW5xCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:observer", + "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkQEh55goGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:daylight_detector", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkri5afQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:repeater" + }, + { + "id": "minecraft:comparator" + }, + { + "id": "minecraft:hopper" + }, + { + "id": "minecraft:dropper", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQfQN6zCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:dispenser", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24DKBQBAA==" + }, + { + "id": "minecraft:piston", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:sticky_piston", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWT/MzCJCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:tnt", + "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZCGfjU4KBgBzdGF0ZXMBFABhbGxvd191bmRlcndhdGVyX2JpdAABCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:name_tag" + }, + { + "id": "minecraft:loom", + "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWR/49HXCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:banner" + }, + { + "id": "minecraft:banner", + "damage": 8 + }, + { + "id": "minecraft:banner", + "damage": 7 + }, + { + "id": "minecraft:banner", + "damage": 15 + }, + { + "id": "minecraft:banner", + "damage": 12 + }, + { + "id": "minecraft:banner", + "damage": 14 + }, + { + "id": "minecraft:banner", + "damage": 1 + }, + { + "id": "minecraft:banner", + "damage": 4 + }, + { + "id": "minecraft:banner", + "damage": 5 + }, + { + "id": "minecraft:banner", + "damage": 13 + }, + { + "id": "minecraft:banner", + "damage": 9 + }, + { + "id": "minecraft:banner", + "damage": 3 + }, + { + "id": "minecraft:banner", + "damage": 11 + }, + { + "id": "minecraft:banner", + "damage": 10 + }, + { + "id": "minecraft:banner", + "damage": 2 + }, + { + "id": "minecraft:banner", + "damage": 6 + }, + { + "id": "minecraft:banner", + "damage": 15, + "nbt_b64": "CgAAAwQAVHlwZQEAAAAA" + }, + { + "id": "minecraft:creeper_banner_pattern" + }, + { + "id": "minecraft:skull_banner_pattern" + }, + { + "id": "minecraft:flower_banner_pattern" + }, + { + "id": "minecraft:mojang_banner_pattern" + }, + { + "id": "minecraft:field_masoned_banner_pattern" + }, + { + "id": "minecraft:bordure_indented_banner_pattern" + }, + { + "id": "minecraft:piglin_banner_pattern" + }, + { + "id": "minecraft:globe_banner_pattern" + }, + { + "id": "minecraft:angler_pottery_sherd" + }, + { + "id": "minecraft:archer_pottery_sherd" + }, + { + "id": "minecraft:arms_up_pottery_sherd" + }, + { + "id": "minecraft:blade_pottery_sherd" + }, + { + "id": "minecraft:brewer_pottery_sherd" + }, + { + "id": "minecraft:burn_pottery_sherd" + }, + { + "id": "minecraft:danger_pottery_sherd" + }, + { + "id": "minecraft:explorer_pottery_sherd" + }, + { + "id": "minecraft:friend_pottery_sherd" + }, + { + "id": "minecraft:heart_pottery_sherd" + }, + { + "id": "minecraft:heartbreak_pottery_sherd" + }, + { + "id": "minecraft:howl_pottery_sherd" + }, + { + "id": "minecraft:miner_pottery_sherd" + }, + { + "id": "minecraft:mourner_pottery_sherd" + }, + { + "id": "minecraft:plenty_pottery_sherd" + }, + { + "id": "minecraft:prize_pottery_sherd" + }, + { + "id": "minecraft:sheaf_pottery_sherd" + }, + { + "id": "minecraft:shelter_pottery_sherd" + }, + { + "id": "minecraft:skull_pottery_sherd" + }, + { + "id": "minecraft:snort_pottery_sherd" + }, + { + "id": "minecraft:netherite_upgrade_smithing_template" + }, + { + "id": "minecraft:sentry_armor_trim_smithing_template" + }, + { + "id": "minecraft:vex_armor_trim_smithing_template" + }, + { + "id": "minecraft:wild_armor_trim_smithing_template" + }, + { + "id": "minecraft:coast_armor_trim_smithing_template" + }, + { + "id": "minecraft:dune_armor_trim_smithing_template" + }, + { + "id": "minecraft:wayfinder_armor_trim_smithing_template" + }, + { + "id": "minecraft:shaper_armor_trim_smithing_template" + }, + { + "id": "minecraft:raiser_armor_trim_smithing_template" + }, + { + "id": "minecraft:host_armor_trim_smithing_template" + }, + { + "id": "minecraft:ward_armor_trim_smithing_template" + }, + { + "id": "minecraft:silence_armor_trim_smithing_template" + }, + { + "id": "minecraft:tide_armor_trim_smithing_template" + }, + { + "id": "minecraft:snout_armor_trim_smithing_template" + }, + { + "id": "minecraft:rib_armor_trim_smithing_template" + }, + { + "id": "minecraft:eye_armor_trim_smithing_template" + }, + { + "id": "minecraft:spire_armor_trim_smithing_template" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwAAAAAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAABwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAIBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAHBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAPBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAMBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAOBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAABBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAEBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAFBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAANBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAJBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAADBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAALBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAKBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAACBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAGBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_star", + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yIR0d/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 8, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yUk9H/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 7, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yl52d/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 15, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y8PDw/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 12, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y2rM6/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 14, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yHYD5/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 1, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yJi6w/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 4, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqkQ8/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 5, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yuDKJ/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 13, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yvU7H/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 9, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqovz/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 3, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yMlSD/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 11, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yPdj+/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 10, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yH8eA/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 2, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yFnxe/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 6, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9ynJwW/wA=" + }, + { + "id": "minecraft:chain" + }, + { + "id": "minecraft:target", + "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZPBozs0KBgBzdGF0ZXMAAwcAdmVyc2lvbgMoFAEA" + }, + { + "id": "minecraft:decorated_pot", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRwvkUUCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uAygUAQA=" + }, + { + "id": "minecraft:lodestone_compass" + }, + { + "id": "minecraft:wither_spawn_egg" + }, + { + "id": "minecraft:ender_dragon_spawn_egg" + } + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_20_40.json b/core/src/main/resources/bedrock/runtime_item_states.1_20_40.json new file mode 100644 index 000000000..861b29c8a --- /dev/null +++ b/core/src/main/resources/bedrock/runtime_item_states.1_20_40.json @@ -0,0 +1,5570 @@ +[ + { + "name": "minecraft:acacia_boat", + "id": 381 + }, + { + "name": "minecraft:acacia_button", + "id": -140 + }, + { + "name": "minecraft:acacia_chest_boat", + "id": 649 + }, + { + "name": "minecraft:acacia_door", + "id": 563 + }, + { + "name": "minecraft:acacia_fence", + "id": -575 + }, + { + "name": "minecraft:acacia_fence_gate", + "id": 187 + }, + { + "name": "minecraft:acacia_hanging_sign", + "id": -504 + }, + { + "name": "minecraft:acacia_log", + "id": 162 + }, + { + "name": "minecraft:acacia_pressure_plate", + "id": -150 + }, + { + "name": "minecraft:acacia_sign", + "id": 586 + }, + { + "name": "minecraft:acacia_stairs", + "id": 163 + }, + { + "name": "minecraft:acacia_standing_sign", + "id": -190 + }, + { + "name": "minecraft:acacia_trapdoor", + "id": -145 + }, + { + "name": "minecraft:acacia_wall_sign", + "id": -191 + }, + { + "name": "minecraft:activator_rail", + "id": 126 + }, + { + "name": "minecraft:agent_spawn_egg", + "id": 489 + }, + { + "name": "minecraft:air", + "id": -158 + }, + { + "name": "minecraft:allay_spawn_egg", + "id": 638 + }, + { + "name": "minecraft:allow", + "id": 210 + }, + { + "name": "minecraft:amethyst_block", + "id": -327 + }, + { + "name": "minecraft:amethyst_cluster", + "id": -329 + }, + { + "name": "minecraft:amethyst_shard", + "id": 631 + }, + { + "name": "minecraft:ancient_debris", + "id": -271 + }, + { + "name": "minecraft:andesite_stairs", + "id": -171 + }, + { + "name": "minecraft:angler_pottery_sherd", + "id": 663 + }, + { + "name": "minecraft:anvil", + "id": 145 + }, + { + "name": "minecraft:apple", + "id": 257 + }, + { + "name": "minecraft:archer_pottery_sherd", + "id": 664 + }, + { + "name": "minecraft:armor_stand", + "id": 559 + }, + { + "name": "minecraft:arms_up_pottery_sherd", + "id": 665 + }, + { + "name": "minecraft:arrow", + "id": 303 + }, + { + "name": "minecraft:axolotl_bucket", + "id": 371 + }, + { + "name": "minecraft:axolotl_spawn_egg", + "id": 503 + }, + { + "name": "minecraft:azalea", + "id": -337 + }, + { + "name": "minecraft:azalea_leaves", + "id": -324 + }, + { + "name": "minecraft:azalea_leaves_flowered", + "id": -325 + }, + { + "name": "minecraft:baked_potato", + "id": 281 + }, + { + "name": "minecraft:balloon", + "id": 605 + }, + { + "name": "minecraft:bamboo", + "id": -163 + }, + { + "name": "minecraft:bamboo_block", + "id": -527 + }, + { + "name": "minecraft:bamboo_button", + "id": -511 + }, + { + "name": "minecraft:bamboo_chest_raft", + "id": 661 + }, + { + "name": "minecraft:bamboo_door", + "id": -517 + }, + { + "name": "minecraft:bamboo_double_slab", + "id": -521 + }, + { + "name": "minecraft:bamboo_fence", + "id": -515 + }, + { + "name": "minecraft:bamboo_fence_gate", + "id": -516 + }, + { + "name": "minecraft:bamboo_hanging_sign", + "id": -522 + }, + { + "name": "minecraft:bamboo_mosaic", + "id": -509 + }, + { + "name": "minecraft:bamboo_mosaic_double_slab", + "id": -525 + }, + { + "name": "minecraft:bamboo_mosaic_slab", + "id": -524 + }, + { + "name": "minecraft:bamboo_mosaic_stairs", + "id": -523 + }, + { + "name": "minecraft:bamboo_planks", + "id": -510 + }, + { + "name": "minecraft:bamboo_pressure_plate", + "id": -514 + }, + { + "name": "minecraft:bamboo_raft", + "id": 660 + }, + { + "name": "minecraft:bamboo_sapling", + "id": -164 + }, + { + "name": "minecraft:bamboo_sign", + "id": 659 + }, + { + "name": "minecraft:bamboo_slab", + "id": -513 + }, + { + "name": "minecraft:bamboo_stairs", + "id": -512 + }, + { + "name": "minecraft:bamboo_standing_sign", + "id": -518 + }, + { + "name": "minecraft:bamboo_trapdoor", + "id": -520 + }, + { + "name": "minecraft:bamboo_wall_sign", + "id": -519 + }, + { + "name": "minecraft:banner", + "id": 574 + }, + { + "name": "minecraft:banner_pattern", + "id": 716 + }, + { + "name": "minecraft:barrel", + "id": -203 + }, + { + "name": "minecraft:barrier", + "id": -161 + }, + { + "name": "minecraft:basalt", + "id": -234 + }, + { + "name": "minecraft:bat_spawn_egg", + "id": 455 + }, + { + "name": "minecraft:beacon", + "id": 138 + }, + { + "name": "minecraft:bed", + "id": 420 + }, + { + "name": "minecraft:bedrock", + "id": 7 + }, + { + "name": "minecraft:bee_nest", + "id": -218 + }, + { + "name": "minecraft:bee_spawn_egg", + "id": 496 + }, + { + "name": "minecraft:beef", + "id": 273 + }, + { + "name": "minecraft:beehive", + "id": -219 + }, + { + "name": "minecraft:beetroot", + "id": 285 + }, + { + "name": "minecraft:beetroot_seeds", + "id": 295 + }, + { + "name": "minecraft:beetroot_soup", + "id": 286 + }, + { + "name": "minecraft:bell", + "id": -206 + }, + { + "name": "minecraft:big_dripleaf", + "id": -323 + }, + { + "name": "minecraft:birch_boat", + "id": 378 + }, + { + "name": "minecraft:birch_button", + "id": -141 + }, + { + "name": "minecraft:birch_chest_boat", + "id": 646 + }, + { + "name": "minecraft:birch_door", + "id": 561 + }, + { + "name": "minecraft:birch_fence", + "id": -576 + }, + { + "name": "minecraft:birch_fence_gate", + "id": 184 + }, + { + "name": "minecraft:birch_hanging_sign", + "id": -502 + }, + { + "name": "minecraft:birch_log", + "id": -570 + }, + { + "name": "minecraft:birch_pressure_plate", + "id": -151 + }, + { + "name": "minecraft:birch_sign", + "id": 584 + }, + { + "name": "minecraft:birch_stairs", + "id": 135 + }, + { + "name": "minecraft:birch_standing_sign", + "id": -186 + }, + { + "name": "minecraft:birch_trapdoor", + "id": -146 + }, + { + "name": "minecraft:birch_wall_sign", + "id": -187 + }, + { + "name": "minecraft:black_candle", + "id": -428 + }, + { + "name": "minecraft:black_candle_cake", + "id": -445 + }, + { + "name": "minecraft:black_carpet", + "id": -611 + }, + { + "name": "minecraft:black_concrete", + "id": -642 + }, + { + "name": "minecraft:black_concrete_powder", + "id": -723 + }, + { + "name": "minecraft:black_dye", + "id": 397 + }, + { + "name": "minecraft:black_glazed_terracotta", + "id": 235 + }, + { + "name": "minecraft:black_shulker_box", + "id": -627 + }, + { + "name": "minecraft:black_stained_glass", + "id": -687 + }, + { + "name": "minecraft:black_stained_glass_pane", + "id": -657 + }, + { + "name": "minecraft:black_terracotta", + "id": -738 + }, + { + "name": "minecraft:black_wool", + "id": -554 + }, + { + "name": "minecraft:blackstone", + "id": -273 + }, + { + "name": "minecraft:blackstone_double_slab", + "id": -283 + }, + { + "name": "minecraft:blackstone_slab", + "id": -282 + }, + { + "name": "minecraft:blackstone_stairs", + "id": -276 + }, + { + "name": "minecraft:blackstone_wall", + "id": -277 + }, + { + "name": "minecraft:blade_pottery_sherd", + "id": 666 + }, + { + "name": "minecraft:blast_furnace", + "id": -196 + }, + { + "name": "minecraft:blaze_powder", + "id": 431 + }, + { + "name": "minecraft:blaze_rod", + "id": 425 + }, + { + "name": "minecraft:blaze_spawn_egg", + "id": 458 + }, + { + "name": "minecraft:bleach", + "id": 603 + }, + { + "name": "minecraft:blue_candle", + "id": -424 + }, + { + "name": "minecraft:blue_candle_cake", + "id": -441 + }, + { + "name": "minecraft:blue_carpet", + "id": -607 + }, + { + "name": "minecraft:blue_concrete", + "id": -638 + }, + { + "name": "minecraft:blue_concrete_powder", + "id": -719 + }, + { + "name": "minecraft:blue_dye", + "id": 401 + }, + { + "name": "minecraft:blue_glazed_terracotta", + "id": 231 + }, + { + "name": "minecraft:blue_ice", + "id": -11 + }, + { + "name": "minecraft:blue_shulker_box", + "id": -623 + }, + { + "name": "minecraft:blue_stained_glass", + "id": -683 + }, + { + "name": "minecraft:blue_stained_glass_pane", + "id": -653 + }, + { + "name": "minecraft:blue_terracotta", + "id": -734 + }, + { + "name": "minecraft:blue_wool", + "id": -563 + }, + { + "name": "minecraft:boat", + "id": 714 + }, + { + "name": "minecraft:bone", + "id": 417 + }, + { + "name": "minecraft:bone_block", + "id": 216 + }, + { + "name": "minecraft:bone_meal", + "id": 413 + }, + { + "name": "minecraft:book", + "id": 389 + }, + { + "name": "minecraft:bookshelf", + "id": 47 + }, + { + "name": "minecraft:border_block", + "id": 212 + }, + { + "name": "minecraft:bordure_indented_banner_pattern", + "id": 593 + }, + { + "name": "minecraft:bow", + "id": 302 + }, + { + "name": "minecraft:bowl", + "id": 323 + }, + { + "name": "minecraft:brain_coral", + "id": -581 + }, + { + "name": "minecraft:bread", + "id": 261 + }, + { + "name": "minecraft:brewer_pottery_sherd", + "id": 667 + }, + { + "name": "minecraft:brewing_stand", + "id": 433 + }, + { + "name": "minecraft:brick", + "id": 385 + }, + { + "name": "minecraft:brick_block", + "id": 45 + }, + { + "name": "minecraft:brick_stairs", + "id": 108 + }, + { + "name": "minecraft:brown_candle", + "id": -425 + }, + { + "name": "minecraft:brown_candle_cake", + "id": -442 + }, + { + "name": "minecraft:brown_carpet", + "id": -608 + }, + { + "name": "minecraft:brown_concrete", + "id": -639 + }, + { + "name": "minecraft:brown_concrete_powder", + "id": -720 + }, + { + "name": "minecraft:brown_dye", + "id": 400 + }, + { + "name": "minecraft:brown_glazed_terracotta", + "id": 232 + }, + { + "name": "minecraft:brown_mushroom", + "id": 39 + }, + { + "name": "minecraft:brown_mushroom_block", + "id": 99 + }, + { + "name": "minecraft:brown_shulker_box", + "id": -624 + }, + { + "name": "minecraft:brown_stained_glass", + "id": -684 + }, + { + "name": "minecraft:brown_stained_glass_pane", + "id": -654 + }, + { + "name": "minecraft:brown_terracotta", + "id": -735 + }, + { + "name": "minecraft:brown_wool", + "id": -555 + }, + { + "name": "minecraft:brush", + "id": 683 + }, + { + "name": "minecraft:bubble_column", + "id": -160 + }, + { + "name": "minecraft:bubble_coral", + "id": -582 + }, + { + "name": "minecraft:bucket", + "id": 362 + }, + { + "name": "minecraft:budding_amethyst", + "id": -328 + }, + { + "name": "minecraft:burn_pottery_sherd", + "id": 668 + }, + { + "name": "minecraft:cactus", + "id": 81 + }, + { + "name": "minecraft:cake", + "id": 419 + }, + { + "name": "minecraft:calcite", + "id": -326 + }, + { + "name": "minecraft:calibrated_sculk_sensor", + "id": -580 + }, + { + "name": "minecraft:camel_spawn_egg", + "id": 662 + }, + { + "name": "minecraft:camera", + "id": 600 + }, + { + "name": "minecraft:campfire", + "id": 596 + }, + { + "name": "minecraft:candle", + "id": -412 + }, + { + "name": "minecraft:candle_cake", + "id": -429 + }, + { + "name": "minecraft:carpet", + "id": 704 + }, + { + "name": "minecraft:carrot", + "id": 279 + }, + { + "name": "minecraft:carrot_on_a_stick", + "id": 524 + }, + { + "name": "minecraft:carrots", + "id": 141 + }, + { + "name": "minecraft:cartography_table", + "id": -200 + }, + { + "name": "minecraft:carved_pumpkin", + "id": -155 + }, + { + "name": "minecraft:cat_spawn_egg", + "id": 490 + }, + { + "name": "minecraft:cauldron", + "id": 434 + }, + { + "name": "minecraft:cave_spider_spawn_egg", + "id": 459 + }, + { + "name": "minecraft:cave_vines", + "id": -322 + }, + { + "name": "minecraft:cave_vines_body_with_berries", + "id": -375 + }, + { + "name": "minecraft:cave_vines_head_with_berries", + "id": -376 + }, + { + "name": "minecraft:chain", + "id": 626 + }, + { + "name": "minecraft:chain_command_block", + "id": 189 + }, + { + "name": "minecraft:chainmail_boots", + "id": 344 + }, + { + "name": "minecraft:chainmail_chestplate", + "id": 342 + }, + { + "name": "minecraft:chainmail_helmet", + "id": 341 + }, + { + "name": "minecraft:chainmail_leggings", + "id": 343 + }, + { + "name": "minecraft:charcoal", + "id": 305 + }, + { + "name": "minecraft:chemical_heat", + "id": 192 + }, + { + "name": "minecraft:chemistry_table", + "id": 238 + }, + { + "name": "minecraft:cherry_boat", + "id": 656 + }, + { + "name": "minecraft:cherry_button", + "id": -530 + }, + { + "name": "minecraft:cherry_chest_boat", + "id": 657 + }, + { + "name": "minecraft:cherry_door", + "id": -531 + }, + { + "name": "minecraft:cherry_double_slab", + "id": -540 + }, + { + "name": "minecraft:cherry_fence", + "id": -532 + }, + { + "name": "minecraft:cherry_fence_gate", + "id": -533 + }, + { + "name": "minecraft:cherry_hanging_sign", + "id": -534 + }, + { + "name": "minecraft:cherry_leaves", + "id": -548 + }, + { + "name": "minecraft:cherry_log", + "id": -536 + }, + { + "name": "minecraft:cherry_planks", + "id": -537 + }, + { + "name": "minecraft:cherry_pressure_plate", + "id": -538 + }, + { + "name": "minecraft:cherry_sapling", + "id": -547 + }, + { + "name": "minecraft:cherry_sign", + "id": 658 + }, + { + "name": "minecraft:cherry_slab", + "id": -539 + }, + { + "name": "minecraft:cherry_stairs", + "id": -541 + }, + { + "name": "minecraft:cherry_standing_sign", + "id": -542 + }, + { + "name": "minecraft:cherry_trapdoor", + "id": -543 + }, + { + "name": "minecraft:cherry_wall_sign", + "id": -544 + }, + { + "name": "minecraft:cherry_wood", + "id": -546 + }, + { + "name": "minecraft:chest", + "id": 54 + }, + { + "name": "minecraft:chest_boat", + "id": 652 + }, + { + "name": "minecraft:chest_minecart", + "id": 391 + }, + { + "name": "minecraft:chicken", + "id": 275 + }, + { + "name": "minecraft:chicken_spawn_egg", + "id": 437 + }, + { + "name": "minecraft:chiseled_bookshelf", + "id": -526 + }, + { + "name": "minecraft:chiseled_deepslate", + "id": -395 + }, + { + "name": "minecraft:chiseled_nether_bricks", + "id": -302 + }, + { + "name": "minecraft:chiseled_polished_blackstone", + "id": -279 + }, + { + "name": "minecraft:chorus_flower", + "id": 200 + }, + { + "name": "minecraft:chorus_fruit", + "id": 565 + }, + { + "name": "minecraft:chorus_plant", + "id": 240 + }, + { + "name": "minecraft:clay", + "id": 82 + }, + { + "name": "minecraft:clay_ball", + "id": 386 + }, + { + "name": "minecraft:client_request_placeholder_block", + "id": -465 + }, + { + "name": "minecraft:clock", + "id": 395 + }, + { + "name": "minecraft:coal", + "id": 304 + }, + { + "name": "minecraft:coal_block", + "id": 173 + }, + { + "name": "minecraft:coal_ore", + "id": 16 + }, + { + "name": "minecraft:coast_armor_trim_smithing_template", + "id": 687 + }, + { + "name": "minecraft:cobbled_deepslate", + "id": -379 + }, + { + "name": "minecraft:cobbled_deepslate_double_slab", + "id": -396 + }, + { + "name": "minecraft:cobbled_deepslate_slab", + "id": -380 + }, + { + "name": "minecraft:cobbled_deepslate_stairs", + "id": -381 + }, + { + "name": "minecraft:cobbled_deepslate_wall", + "id": -382 + }, + { + "name": "minecraft:cobblestone", + "id": 4 + }, + { + "name": "minecraft:cobblestone_wall", + "id": 139 + }, + { + "name": "minecraft:cocoa", + "id": 127 + }, + { + "name": "minecraft:cocoa_beans", + "id": 414 + }, + { + "name": "minecraft:cod", + "id": 264 + }, + { + "name": "minecraft:cod_bucket", + "id": 366 + }, + { + "name": "minecraft:cod_spawn_egg", + "id": 482 + }, + { + "name": "minecraft:colored_torch_bp", + "id": 204 + }, + { + "name": "minecraft:colored_torch_rg", + "id": 202 + }, + { + "name": "minecraft:command_block", + "id": 137 + }, + { + "name": "minecraft:command_block_minecart", + "id": 570 + }, + { + "name": "minecraft:comparator", + "id": 529 + }, + { + "name": "minecraft:compass", + "id": 393 + }, + { + "name": "minecraft:composter", + "id": -213 + }, + { + "name": "minecraft:compound", + "id": 601 + }, + { + "name": "minecraft:concrete", + "id": 709 + }, + { + "name": "minecraft:concrete_powder", + "id": 710 + }, + { + "name": "minecraft:conduit", + "id": -157 + }, + { + "name": "minecraft:cooked_beef", + "id": 274 + }, + { + "name": "minecraft:cooked_chicken", + "id": 276 + }, + { + "name": "minecraft:cooked_cod", + "id": 268 + }, + { + "name": "minecraft:cooked_mutton", + "id": 558 + }, + { + "name": "minecraft:cooked_porkchop", + "id": 263 + }, + { + "name": "minecraft:cooked_rabbit", + "id": 289 + }, + { + "name": "minecraft:cooked_salmon", + "id": 269 + }, + { + "name": "minecraft:cookie", + "id": 271 + }, + { + "name": "minecraft:copper_block", + "id": -340 + }, + { + "name": "minecraft:copper_ingot", + "id": 511 + }, + { + "name": "minecraft:copper_ore", + "id": -311 + }, + { + "name": "minecraft:coral", + "id": 707 + }, + { + "name": "minecraft:coral_block", + "id": -132 + }, + { + "name": "minecraft:coral_fan", + "id": -133 + }, + { + "name": "minecraft:coral_fan_dead", + "id": -134 + }, + { + "name": "minecraft:coral_fan_hang", + "id": -135 + }, + { + "name": "minecraft:coral_fan_hang2", + "id": -136 + }, + { + "name": "minecraft:coral_fan_hang3", + "id": -137 + }, + { + "name": "minecraft:cow_spawn_egg", + "id": 438 + }, + { + "name": "minecraft:cracked_deepslate_bricks", + "id": -410 + }, + { + "name": "minecraft:cracked_deepslate_tiles", + "id": -409 + }, + { + "name": "minecraft:cracked_nether_bricks", + "id": -303 + }, + { + "name": "minecraft:cracked_polished_blackstone_bricks", + "id": -280 + }, + { + "name": "minecraft:crafting_table", + "id": 58 + }, + { + "name": "minecraft:creeper_banner_pattern", + "id": 589 + }, + { + "name": "minecraft:creeper_spawn_egg", + "id": 443 + }, + { + "name": "minecraft:crimson_button", + "id": -260 + }, + { + "name": "minecraft:crimson_door", + "id": 623 + }, + { + "name": "minecraft:crimson_double_slab", + "id": -266 + }, + { + "name": "minecraft:crimson_fence", + "id": -256 + }, + { + "name": "minecraft:crimson_fence_gate", + "id": -258 + }, + { + "name": "minecraft:crimson_fungus", + "id": -228 + }, + { + "name": "minecraft:crimson_hanging_sign", + "id": -506 + }, + { + "name": "minecraft:crimson_hyphae", + "id": -299 + }, + { + "name": "minecraft:crimson_nylium", + "id": -232 + }, + { + "name": "minecraft:crimson_planks", + "id": -242 + }, + { + "name": "minecraft:crimson_pressure_plate", + "id": -262 + }, + { + "name": "minecraft:crimson_roots", + "id": -223 + }, + { + "name": "minecraft:crimson_sign", + "id": 621 + }, + { + "name": "minecraft:crimson_slab", + "id": -264 + }, + { + "name": "minecraft:crimson_stairs", + "id": -254 + }, + { + "name": "minecraft:crimson_standing_sign", + "id": -250 + }, + { + "name": "minecraft:crimson_stem", + "id": -225 + }, + { + "name": "minecraft:crimson_trapdoor", + "id": -246 + }, + { + "name": "minecraft:crimson_wall_sign", + "id": -252 + }, + { + "name": "minecraft:crossbow", + "id": 582 + }, + { + "name": "minecraft:crying_obsidian", + "id": -289 + }, + { + "name": "minecraft:cut_copper", + "id": -347 + }, + { + "name": "minecraft:cut_copper_slab", + "id": -361 + }, + { + "name": "minecraft:cut_copper_stairs", + "id": -354 + }, + { + "name": "minecraft:cyan_candle", + "id": -422 + }, + { + "name": "minecraft:cyan_candle_cake", + "id": -439 + }, + { + "name": "minecraft:cyan_carpet", + "id": -605 + }, + { + "name": "minecraft:cyan_concrete", + "id": -636 + }, + { + "name": "minecraft:cyan_concrete_powder", + "id": -717 + }, + { + "name": "minecraft:cyan_dye", + "id": 403 + }, + { + "name": "minecraft:cyan_glazed_terracotta", + "id": 229 + }, + { + "name": "minecraft:cyan_shulker_box", + "id": -621 + }, + { + "name": "minecraft:cyan_stained_glass", + "id": -681 + }, + { + "name": "minecraft:cyan_stained_glass_pane", + "id": -651 + }, + { + "name": "minecraft:cyan_terracotta", + "id": -732 + }, + { + "name": "minecraft:cyan_wool", + "id": -561 + }, + { + "name": "minecraft:danger_pottery_sherd", + "id": 669 + }, + { + "name": "minecraft:dark_oak_boat", + "id": 382 + }, + { + "name": "minecraft:dark_oak_button", + "id": -142 + }, + { + "name": "minecraft:dark_oak_chest_boat", + "id": 650 + }, + { + "name": "minecraft:dark_oak_door", + "id": 564 + }, + { + "name": "minecraft:dark_oak_fence", + "id": -577 + }, + { + "name": "minecraft:dark_oak_fence_gate", + "id": 186 + }, + { + "name": "minecraft:dark_oak_hanging_sign", + "id": -505 + }, + { + "name": "minecraft:dark_oak_log", + "id": -572 + }, + { + "name": "minecraft:dark_oak_pressure_plate", + "id": -152 + }, + { + "name": "minecraft:dark_oak_sign", + "id": 587 + }, + { + "name": "minecraft:dark_oak_stairs", + "id": 164 + }, + { + "name": "minecraft:dark_oak_trapdoor", + "id": -147 + }, + { + "name": "minecraft:dark_prismarine_stairs", + "id": -3 + }, + { + "name": "minecraft:darkoak_standing_sign", + "id": -192 + }, + { + "name": "minecraft:darkoak_wall_sign", + "id": -193 + }, + { + "name": "minecraft:daylight_detector", + "id": 151 + }, + { + "name": "minecraft:daylight_detector_inverted", + "id": 178 + }, + { + "name": "minecraft:dead_brain_coral", + "id": -586 + }, + { + "name": "minecraft:dead_bubble_coral", + "id": -587 + }, + { + "name": "minecraft:dead_fire_coral", + "id": -588 + }, + { + "name": "minecraft:dead_horn_coral", + "id": -589 + }, + { + "name": "minecraft:dead_tube_coral", + "id": -585 + }, + { + "name": "minecraft:deadbush", + "id": 32 + }, + { + "name": "minecraft:decorated_pot", + "id": -551 + }, + { + "name": "minecraft:deepslate", + "id": -378 + }, + { + "name": "minecraft:deepslate_brick_double_slab", + "id": -399 + }, + { + "name": "minecraft:deepslate_brick_slab", + "id": -392 + }, + { + "name": "minecraft:deepslate_brick_stairs", + "id": -393 + }, + { + "name": "minecraft:deepslate_brick_wall", + "id": -394 + }, + { + "name": "minecraft:deepslate_bricks", + "id": -391 + }, + { + "name": "minecraft:deepslate_coal_ore", + "id": -406 + }, + { + "name": "minecraft:deepslate_copper_ore", + "id": -408 + }, + { + "name": "minecraft:deepslate_diamond_ore", + "id": -405 + }, + { + "name": "minecraft:deepslate_emerald_ore", + "id": -407 + }, + { + "name": "minecraft:deepslate_gold_ore", + "id": -402 + }, + { + "name": "minecraft:deepslate_iron_ore", + "id": -401 + }, + { + "name": "minecraft:deepslate_lapis_ore", + "id": -400 + }, + { + "name": "minecraft:deepslate_redstone_ore", + "id": -403 + }, + { + "name": "minecraft:deepslate_tile_double_slab", + "id": -398 + }, + { + "name": "minecraft:deepslate_tile_slab", + "id": -388 + }, + { + "name": "minecraft:deepslate_tile_stairs", + "id": -389 + }, + { + "name": "minecraft:deepslate_tile_wall", + "id": -390 + }, + { + "name": "minecraft:deepslate_tiles", + "id": -387 + }, + { + "name": "minecraft:deny", + "id": 211 + }, + { + "name": "minecraft:detector_rail", + "id": 28 + }, + { + "name": "minecraft:diamond", + "id": 306 + }, + { + "name": "minecraft:diamond_axe", + "id": 321 + }, + { + "name": "minecraft:diamond_block", + "id": 57 + }, + { + "name": "minecraft:diamond_boots", + "id": 352 + }, + { + "name": "minecraft:diamond_chestplate", + "id": 350 + }, + { + "name": "minecraft:diamond_helmet", + "id": 349 + }, + { + "name": "minecraft:diamond_hoe", + "id": 334 + }, + { + "name": "minecraft:diamond_horse_armor", + "id": 540 + }, + { + "name": "minecraft:diamond_leggings", + "id": 351 + }, + { + "name": "minecraft:diamond_ore", + "id": 56 + }, + { + "name": "minecraft:diamond_pickaxe", + "id": 320 + }, + { + "name": "minecraft:diamond_shovel", + "id": 319 + }, + { + "name": "minecraft:diamond_sword", + "id": 318 + }, + { + "name": "minecraft:diorite_stairs", + "id": -170 + }, + { + "name": "minecraft:dirt", + "id": 3 + }, + { + "name": "minecraft:dirt_with_roots", + "id": -318 + }, + { + "name": "minecraft:disc_fragment_5", + "id": 644 + }, + { + "name": "minecraft:dispenser", + "id": 23 + }, + { + "name": "minecraft:dolphin_spawn_egg", + "id": 486 + }, + { + "name": "minecraft:donkey_spawn_egg", + "id": 467 + }, + { + "name": "minecraft:double_cut_copper_slab", + "id": -368 + }, + { + "name": "minecraft:double_plant", + "id": 175 + }, + { + "name": "minecraft:double_stone_block_slab", + "id": 43 + }, + { + "name": "minecraft:double_stone_block_slab2", + "id": 181 + }, + { + "name": "minecraft:double_stone_block_slab3", + "id": -167 + }, + { + "name": "minecraft:double_stone_block_slab4", + "id": -168 + }, + { + "name": "minecraft:double_wooden_slab", + "id": 157 + }, + { + "name": "minecraft:dragon_breath", + "id": 567 + }, + { + "name": "minecraft:dragon_egg", + "id": 122 + }, + { + "name": "minecraft:dried_kelp", + "id": 270 + }, + { + "name": "minecraft:dried_kelp_block", + "id": -139 + }, + { + "name": "minecraft:dripstone_block", + "id": -317 + }, + { + "name": "minecraft:dropper", + "id": 125 + }, + { + "name": "minecraft:drowned_spawn_egg", + "id": 485 + }, + { + "name": "minecraft:dune_armor_trim_smithing_template", + "id": 686 + }, + { + "name": "minecraft:dye", + "id": 715 + }, + { + "name": "minecraft:echo_shard", + "id": 654 + }, + { + "name": "minecraft:egg", + "id": 392 + }, + { + "name": "minecraft:elder_guardian_spawn_egg", + "id": 473 + }, + { + "name": "minecraft:element_0", + "id": 36 + }, + { + "name": "minecraft:element_1", + "id": -12 + }, + { + "name": "minecraft:element_10", + "id": -21 + }, + { + "name": "minecraft:element_100", + "id": -111 + }, + { + "name": "minecraft:element_101", + "id": -112 + }, + { + "name": "minecraft:element_102", + "id": -113 + }, + { + "name": "minecraft:element_103", + "id": -114 + }, + { + "name": "minecraft:element_104", + "id": -115 + }, + { + "name": "minecraft:element_105", + "id": -116 + }, + { + "name": "minecraft:element_106", + "id": -117 + }, + { + "name": "minecraft:element_107", + "id": -118 + }, + { + "name": "minecraft:element_108", + "id": -119 + }, + { + "name": "minecraft:element_109", + "id": -120 + }, + { + "name": "minecraft:element_11", + "id": -22 + }, + { + "name": "minecraft:element_110", + "id": -121 + }, + { + "name": "minecraft:element_111", + "id": -122 + }, + { + "name": "minecraft:element_112", + "id": -123 + }, + { + "name": "minecraft:element_113", + "id": -124 + }, + { + "name": "minecraft:element_114", + "id": -125 + }, + { + "name": "minecraft:element_115", + "id": -126 + }, + { + "name": "minecraft:element_116", + "id": -127 + }, + { + "name": "minecraft:element_117", + "id": -128 + }, + { + "name": "minecraft:element_118", + "id": -129 + }, + { + "name": "minecraft:element_12", + "id": -23 + }, + { + "name": "minecraft:element_13", + "id": -24 + }, + { + "name": "minecraft:element_14", + "id": -25 + }, + { + "name": "minecraft:element_15", + "id": -26 + }, + { + "name": "minecraft:element_16", + "id": -27 + }, + { + "name": "minecraft:element_17", + "id": -28 + }, + { + "name": "minecraft:element_18", + "id": -29 + }, + { + "name": "minecraft:element_19", + "id": -30 + }, + { + "name": "minecraft:element_2", + "id": -13 + }, + { + "name": "minecraft:element_20", + "id": -31 + }, + { + "name": "minecraft:element_21", + "id": -32 + }, + { + "name": "minecraft:element_22", + "id": -33 + }, + { + "name": "minecraft:element_23", + "id": -34 + }, + { + "name": "minecraft:element_24", + "id": -35 + }, + { + "name": "minecraft:element_25", + "id": -36 + }, + { + "name": "minecraft:element_26", + "id": -37 + }, + { + "name": "minecraft:element_27", + "id": -38 + }, + { + "name": "minecraft:element_28", + "id": -39 + }, + { + "name": "minecraft:element_29", + "id": -40 + }, + { + "name": "minecraft:element_3", + "id": -14 + }, + { + "name": "minecraft:element_30", + "id": -41 + }, + { + "name": "minecraft:element_31", + "id": -42 + }, + { + "name": "minecraft:element_32", + "id": -43 + }, + { + "name": "minecraft:element_33", + "id": -44 + }, + { + "name": "minecraft:element_34", + "id": -45 + }, + { + "name": "minecraft:element_35", + "id": -46 + }, + { + "name": "minecraft:element_36", + "id": -47 + }, + { + "name": "minecraft:element_37", + "id": -48 + }, + { + "name": "minecraft:element_38", + "id": -49 + }, + { + "name": "minecraft:element_39", + "id": -50 + }, + { + "name": "minecraft:element_4", + "id": -15 + }, + { + "name": "minecraft:element_40", + "id": -51 + }, + { + "name": "minecraft:element_41", + "id": -52 + }, + { + "name": "minecraft:element_42", + "id": -53 + }, + { + "name": "minecraft:element_43", + "id": -54 + }, + { + "name": "minecraft:element_44", + "id": -55 + }, + { + "name": "minecraft:element_45", + "id": -56 + }, + { + "name": "minecraft:element_46", + "id": -57 + }, + { + "name": "minecraft:element_47", + "id": -58 + }, + { + "name": "minecraft:element_48", + "id": -59 + }, + { + "name": "minecraft:element_49", + "id": -60 + }, + { + "name": "minecraft:element_5", + "id": -16 + }, + { + "name": "minecraft:element_50", + "id": -61 + }, + { + "name": "minecraft:element_51", + "id": -62 + }, + { + "name": "minecraft:element_52", + "id": -63 + }, + { + "name": "minecraft:element_53", + "id": -64 + }, + { + "name": "minecraft:element_54", + "id": -65 + }, + { + "name": "minecraft:element_55", + "id": -66 + }, + { + "name": "minecraft:element_56", + "id": -67 + }, + { + "name": "minecraft:element_57", + "id": -68 + }, + { + "name": "minecraft:element_58", + "id": -69 + }, + { + "name": "minecraft:element_59", + "id": -70 + }, + { + "name": "minecraft:element_6", + "id": -17 + }, + { + "name": "minecraft:element_60", + "id": -71 + }, + { + "name": "minecraft:element_61", + "id": -72 + }, + { + "name": "minecraft:element_62", + "id": -73 + }, + { + "name": "minecraft:element_63", + "id": -74 + }, + { + "name": "minecraft:element_64", + "id": -75 + }, + { + "name": "minecraft:element_65", + "id": -76 + }, + { + "name": "minecraft:element_66", + "id": -77 + }, + { + "name": "minecraft:element_67", + "id": -78 + }, + { + "name": "minecraft:element_68", + "id": -79 + }, + { + "name": "minecraft:element_69", + "id": -80 + }, + { + "name": "minecraft:element_7", + "id": -18 + }, + { + "name": "minecraft:element_70", + "id": -81 + }, + { + "name": "minecraft:element_71", + "id": -82 + }, + { + "name": "minecraft:element_72", + "id": -83 + }, + { + "name": "minecraft:element_73", + "id": -84 + }, + { + "name": "minecraft:element_74", + "id": -85 + }, + { + "name": "minecraft:element_75", + "id": -86 + }, + { + "name": "minecraft:element_76", + "id": -87 + }, + { + "name": "minecraft:element_77", + "id": -88 + }, + { + "name": "minecraft:element_78", + "id": -89 + }, + { + "name": "minecraft:element_79", + "id": -90 + }, + { + "name": "minecraft:element_8", + "id": -19 + }, + { + "name": "minecraft:element_80", + "id": -91 + }, + { + "name": "minecraft:element_81", + "id": -92 + }, + { + "name": "minecraft:element_82", + "id": -93 + }, + { + "name": "minecraft:element_83", + "id": -94 + }, + { + "name": "minecraft:element_84", + "id": -95 + }, + { + "name": "minecraft:element_85", + "id": -96 + }, + { + "name": "minecraft:element_86", + "id": -97 + }, + { + "name": "minecraft:element_87", + "id": -98 + }, + { + "name": "minecraft:element_88", + "id": -99 + }, + { + "name": "minecraft:element_89", + "id": -100 + }, + { + "name": "minecraft:element_9", + "id": -20 + }, + { + "name": "minecraft:element_90", + "id": -101 + }, + { + "name": "minecraft:element_91", + "id": -102 + }, + { + "name": "minecraft:element_92", + "id": -103 + }, + { + "name": "minecraft:element_93", + "id": -104 + }, + { + "name": "minecraft:element_94", + "id": -105 + }, + { + "name": "minecraft:element_95", + "id": -106 + }, + { + "name": "minecraft:element_96", + "id": -107 + }, + { + "name": "minecraft:element_97", + "id": -108 + }, + { + "name": "minecraft:element_98", + "id": -109 + }, + { + "name": "minecraft:element_99", + "id": -110 + }, + { + "name": "minecraft:elytra", + "id": 571 + }, + { + "name": "minecraft:emerald", + "id": 519 + }, + { + "name": "minecraft:emerald_block", + "id": 133 + }, + { + "name": "minecraft:emerald_ore", + "id": 129 + }, + { + "name": "minecraft:empty_map", + "id": 522 + }, + { + "name": "minecraft:enchanted_book", + "id": 528 + }, + { + "name": "minecraft:enchanted_golden_apple", + "id": 259 + }, + { + "name": "minecraft:enchanting_table", + "id": 116 + }, + { + "name": "minecraft:end_brick_stairs", + "id": -178 + }, + { + "name": "minecraft:end_bricks", + "id": 206 + }, + { + "name": "minecraft:end_crystal", + "id": 718 + }, + { + "name": "minecraft:end_gateway", + "id": 209 + }, + { + "name": "minecraft:end_portal", + "id": 119 + }, + { + "name": "minecraft:end_portal_frame", + "id": 120 + }, + { + "name": "minecraft:end_rod", + "id": 208 + }, + { + "name": "minecraft:end_stone", + "id": 121 + }, + { + "name": "minecraft:ender_chest", + "id": 130 + }, + { + "name": "minecraft:ender_dragon_spawn_egg", + "id": 508 + }, + { + "name": "minecraft:ender_eye", + "id": 435 + }, + { + "name": "minecraft:ender_pearl", + "id": 424 + }, + { + "name": "minecraft:enderman_spawn_egg", + "id": 444 + }, + { + "name": "minecraft:endermite_spawn_egg", + "id": 462 + }, + { + "name": "minecraft:evoker_spawn_egg", + "id": 477 + }, + { + "name": "minecraft:experience_bottle", + "id": 515 + }, + { + "name": "minecraft:explorer_pottery_sherd", + "id": 670 + }, + { + "name": "minecraft:exposed_copper", + "id": -341 + }, + { + "name": "minecraft:exposed_cut_copper", + "id": -348 + }, + { + "name": "minecraft:exposed_cut_copper_slab", + "id": -362 + }, + { + "name": "minecraft:exposed_cut_copper_stairs", + "id": -355 + }, + { + "name": "minecraft:exposed_double_cut_copper_slab", + "id": -369 + }, + { + "name": "minecraft:eye_armor_trim_smithing_template", + "id": 690 + }, + { + "name": "minecraft:farmland", + "id": 60 + }, + { + "name": "minecraft:feather", + "id": 329 + }, + { + "name": "minecraft:fence", + "id": 706 + }, + { + "name": "minecraft:fence_gate", + "id": 107 + }, + { + "name": "minecraft:fermented_spider_eye", + "id": 430 + }, + { + "name": "minecraft:field_masoned_banner_pattern", + "id": 592 + }, + { + "name": "minecraft:filled_map", + "id": 422 + }, + { + "name": "minecraft:fire", + "id": 51 + }, + { + "name": "minecraft:fire_charge", + "id": 516 + }, + { + "name": "minecraft:fire_coral", + "id": -583 + }, + { + "name": "minecraft:firework_rocket", + "id": 526 + }, + { + "name": "minecraft:firework_star", + "id": 527 + }, + { + "name": "minecraft:fishing_rod", + "id": 394 + }, + { + "name": "minecraft:fletching_table", + "id": -201 + }, + { + "name": "minecraft:flint", + "id": 358 + }, + { + "name": "minecraft:flint_and_steel", + "id": 301 + }, + { + "name": "minecraft:flower_banner_pattern", + "id": 588 + }, + { + "name": "minecraft:flower_pot", + "id": 521 + }, + { + "name": "minecraft:flowering_azalea", + "id": -338 + }, + { + "name": "minecraft:flowing_lava", + "id": 10 + }, + { + "name": "minecraft:flowing_water", + "id": 8 + }, + { + "name": "minecraft:fox_spawn_egg", + "id": 492 + }, + { + "name": "minecraft:frame", + "id": 520 + }, + { + "name": "minecraft:friend_pottery_sherd", + "id": 671 + }, + { + "name": "minecraft:frog_spawn", + "id": -468 + }, + { + "name": "minecraft:frog_spawn_egg", + "id": 635 + }, + { + "name": "minecraft:frosted_ice", + "id": 207 + }, + { + "name": "minecraft:furnace", + "id": 61 + }, + { + "name": "minecraft:ghast_spawn_egg", + "id": 456 + }, + { + "name": "minecraft:ghast_tear", + "id": 426 + }, + { + "name": "minecraft:gilded_blackstone", + "id": -281 + }, + { + "name": "minecraft:glass", + "id": 20 + }, + { + "name": "minecraft:glass_bottle", + "id": 429 + }, + { + "name": "minecraft:glass_pane", + "id": 102 + }, + { + "name": "minecraft:glistering_melon_slice", + "id": 436 + }, + { + "name": "minecraft:globe_banner_pattern", + "id": 595 + }, + { + "name": "minecraft:glow_berries", + "id": 719 + }, + { + "name": "minecraft:glow_frame", + "id": 630 + }, + { + "name": "minecraft:glow_ink_sac", + "id": 510 + }, + { + "name": "minecraft:glow_lichen", + "id": -411 + }, + { + "name": "minecraft:glow_squid_spawn_egg", + "id": 505 + }, + { + "name": "minecraft:glow_stick", + "id": 608 + }, + { + "name": "minecraft:glowingobsidian", + "id": 246 + }, + { + "name": "minecraft:glowstone", + "id": 89 + }, + { + "name": "minecraft:glowstone_dust", + "id": 396 + }, + { + "name": "minecraft:goat_horn", + "id": 634 + }, + { + "name": "minecraft:goat_spawn_egg", + "id": 504 + }, + { + "name": "minecraft:gold_block", + "id": 41 + }, + { + "name": "minecraft:gold_ingot", + "id": 308 + }, + { + "name": "minecraft:gold_nugget", + "id": 427 + }, + { + "name": "minecraft:gold_ore", + "id": 14 + }, + { + "name": "minecraft:golden_apple", + "id": 258 + }, + { + "name": "minecraft:golden_axe", + "id": 327 + }, + { + "name": "minecraft:golden_boots", + "id": 356 + }, + { + "name": "minecraft:golden_carrot", + "id": 283 + }, + { + "name": "minecraft:golden_chestplate", + "id": 354 + }, + { + "name": "minecraft:golden_helmet", + "id": 353 + }, + { + "name": "minecraft:golden_hoe", + "id": 335 + }, + { + "name": "minecraft:golden_horse_armor", + "id": 539 + }, + { + "name": "minecraft:golden_leggings", + "id": 355 + }, + { + "name": "minecraft:golden_pickaxe", + "id": 326 + }, + { + "name": "minecraft:golden_rail", + "id": 27 + }, + { + "name": "minecraft:golden_shovel", + "id": 325 + }, + { + "name": "minecraft:golden_sword", + "id": 324 + }, + { + "name": "minecraft:granite_stairs", + "id": -169 + }, + { + "name": "minecraft:grass", + "id": 2 + }, + { + "name": "minecraft:grass_path", + "id": 198 + }, + { + "name": "minecraft:gravel", + "id": 13 + }, + { + "name": "minecraft:gray_candle", + "id": -420 + }, + { + "name": "minecraft:gray_candle_cake", + "id": -437 + }, + { + "name": "minecraft:gray_carpet", + "id": -603 + }, + { + "name": "minecraft:gray_concrete", + "id": -634 + }, + { + "name": "minecraft:gray_concrete_powder", + "id": -715 + }, + { + "name": "minecraft:gray_dye", + "id": 405 + }, + { + "name": "minecraft:gray_glazed_terracotta", + "id": 227 + }, + { + "name": "minecraft:gray_shulker_box", + "id": -619 + }, + { + "name": "minecraft:gray_stained_glass", + "id": -679 + }, + { + "name": "minecraft:gray_stained_glass_pane", + "id": -649 + }, + { + "name": "minecraft:gray_terracotta", + "id": -730 + }, + { + "name": "minecraft:gray_wool", + "id": -553 + }, + { + "name": "minecraft:green_candle", + "id": -426 + }, + { + "name": "minecraft:green_candle_cake", + "id": -443 + }, + { + "name": "minecraft:green_carpet", + "id": -609 + }, + { + "name": "minecraft:green_concrete", + "id": -640 + }, + { + "name": "minecraft:green_concrete_powder", + "id": -721 + }, + { + "name": "minecraft:green_dye", + "id": 399 + }, + { + "name": "minecraft:green_glazed_terracotta", + "id": 233 + }, + { + "name": "minecraft:green_shulker_box", + "id": -625 + }, + { + "name": "minecraft:green_stained_glass", + "id": -685 + }, + { + "name": "minecraft:green_stained_glass_pane", + "id": -655 + }, + { + "name": "minecraft:green_terracotta", + "id": -736 + }, + { + "name": "minecraft:green_wool", + "id": -560 + }, + { + "name": "minecraft:grindstone", + "id": -195 + }, + { + "name": "minecraft:guardian_spawn_egg", + "id": 463 + }, + { + "name": "minecraft:gunpowder", + "id": 330 + }, + { + "name": "minecraft:hanging_roots", + "id": -319 + }, + { + "name": "minecraft:hard_glass", + "id": 253 + }, + { + "name": "minecraft:hard_glass_pane", + "id": 190 + }, + { + "name": "minecraft:hard_stained_glass", + "id": 254 + }, + { + "name": "minecraft:hard_stained_glass_pane", + "id": 191 + }, + { + "name": "minecraft:hardened_clay", + "id": 172 + }, + { + "name": "minecraft:hay_block", + "id": 170 + }, + { + "name": "minecraft:heart_of_the_sea", + "id": 578 + }, + { + "name": "minecraft:heart_pottery_sherd", + "id": 672 + }, + { + "name": "minecraft:heartbreak_pottery_sherd", + "id": 673 + }, + { + "name": "minecraft:heavy_weighted_pressure_plate", + "id": 148 + }, + { + "name": "minecraft:hoglin_spawn_egg", + "id": 498 + }, + { + "name": "minecraft:honey_block", + "id": -220 + }, + { + "name": "minecraft:honey_bottle", + "id": 599 + }, + { + "name": "minecraft:honeycomb", + "id": 598 + }, + { + "name": "minecraft:honeycomb_block", + "id": -221 + }, + { + "name": "minecraft:hopper", + "id": 534 + }, + { + "name": "minecraft:hopper_minecart", + "id": 533 + }, + { + "name": "minecraft:horn_coral", + "id": -584 + }, + { + "name": "minecraft:horse_spawn_egg", + "id": 460 + }, + { + "name": "minecraft:host_armor_trim_smithing_template", + "id": 700 + }, + { + "name": "minecraft:howl_pottery_sherd", + "id": 674 + }, + { + "name": "minecraft:husk_spawn_egg", + "id": 465 + }, + { + "name": "minecraft:ice", + "id": 79 + }, + { + "name": "minecraft:ice_bomb", + "id": 602 + }, + { + "name": "minecraft:infested_deepslate", + "id": -454 + }, + { + "name": "minecraft:info_update", + "id": 248 + }, + { + "name": "minecraft:info_update2", + "id": 249 + }, + { + "name": "minecraft:ink_sac", + "id": 415 + }, + { + "name": "minecraft:invisible_bedrock", + "id": 95 + }, + { + "name": "minecraft:iron_axe", + "id": 300 + }, + { + "name": "minecraft:iron_bars", + "id": 101 + }, + { + "name": "minecraft:iron_block", + "id": 42 + }, + { + "name": "minecraft:iron_boots", + "id": 348 + }, + { + "name": "minecraft:iron_chestplate", + "id": 346 + }, + { + "name": "minecraft:iron_door", + "id": 374 + }, + { + "name": "minecraft:iron_golem_spawn_egg", + "id": 506 + }, + { + "name": "minecraft:iron_helmet", + "id": 345 + }, + { + "name": "minecraft:iron_hoe", + "id": 333 + }, + { + "name": "minecraft:iron_horse_armor", + "id": 538 + }, + { + "name": "minecraft:iron_ingot", + "id": 307 + }, + { + "name": "minecraft:iron_leggings", + "id": 347 + }, + { + "name": "minecraft:iron_nugget", + "id": 576 + }, + { + "name": "minecraft:iron_ore", + "id": 15 + }, + { + "name": "minecraft:iron_pickaxe", + "id": 299 + }, + { + "name": "minecraft:iron_shovel", + "id": 298 + }, + { + "name": "minecraft:iron_sword", + "id": 309 + }, + { + "name": "minecraft:iron_trapdoor", + "id": 167 + }, + { + "name": "minecraft:item.acacia_door", + "id": 196 + }, + { + "name": "minecraft:item.bed", + "id": 26 + }, + { + "name": "minecraft:item.beetroot", + "id": 244 + }, + { + "name": "minecraft:item.birch_door", + "id": 194 + }, + { + "name": "minecraft:item.brewing_stand", + "id": 117 + }, + { + "name": "minecraft:item.cake", + "id": 92 + }, + { + "name": "minecraft:item.camera", + "id": 242 + }, + { + "name": "minecraft:item.campfire", + "id": -209 + }, + { + "name": "minecraft:item.cauldron", + "id": 118 + }, + { + "name": "minecraft:item.chain", + "id": -286 + }, + { + "name": "minecraft:item.crimson_door", + "id": -244 + }, + { + "name": "minecraft:item.dark_oak_door", + "id": 197 + }, + { + "name": "minecraft:item.flower_pot", + "id": 140 + }, + { + "name": "minecraft:item.frame", + "id": 199 + }, + { + "name": "minecraft:item.glow_frame", + "id": -339 + }, + { + "name": "minecraft:item.hopper", + "id": 154 + }, + { + "name": "minecraft:item.iron_door", + "id": 71 + }, + { + "name": "minecraft:item.jungle_door", + "id": 195 + }, + { + "name": "minecraft:item.kelp", + "id": -138 + }, + { + "name": "minecraft:item.mangrove_door", + "id": -493 + }, + { + "name": "minecraft:item.nether_sprouts", + "id": -238 + }, + { + "name": "minecraft:item.nether_wart", + "id": 115 + }, + { + "name": "minecraft:item.reeds", + "id": 83 + }, + { + "name": "minecraft:item.skull", + "id": 144 + }, + { + "name": "minecraft:item.soul_campfire", + "id": -290 + }, + { + "name": "minecraft:item.spruce_door", + "id": 193 + }, + { + "name": "minecraft:item.warped_door", + "id": -245 + }, + { + "name": "minecraft:item.wheat", + "id": 59 + }, + { + "name": "minecraft:item.wooden_door", + "id": 64 + }, + { + "name": "minecraft:jigsaw", + "id": -211 + }, + { + "name": "minecraft:jukebox", + "id": 84 + }, + { + "name": "minecraft:jungle_boat", + "id": 379 + }, + { + "name": "minecraft:jungle_button", + "id": -143 + }, + { + "name": "minecraft:jungle_chest_boat", + "id": 647 + }, + { + "name": "minecraft:jungle_door", + "id": 562 + }, + { + "name": "minecraft:jungle_fence", + "id": -578 + }, + { + "name": "minecraft:jungle_fence_gate", + "id": 185 + }, + { + "name": "minecraft:jungle_hanging_sign", + "id": -503 + }, + { + "name": "minecraft:jungle_log", + "id": -571 + }, + { + "name": "minecraft:jungle_pressure_plate", + "id": -153 + }, + { + "name": "minecraft:jungle_sign", + "id": 585 + }, + { + "name": "minecraft:jungle_stairs", + "id": 136 + }, + { + "name": "minecraft:jungle_standing_sign", + "id": -188 + }, + { + "name": "minecraft:jungle_trapdoor", + "id": -148 + }, + { + "name": "minecraft:jungle_wall_sign", + "id": -189 + }, + { + "name": "minecraft:kelp", + "id": 384 + }, + { + "name": "minecraft:ladder", + "id": 65 + }, + { + "name": "minecraft:lantern", + "id": -208 + }, + { + "name": "minecraft:lapis_block", + "id": 22 + }, + { + "name": "minecraft:lapis_lazuli", + "id": 416 + }, + { + "name": "minecraft:lapis_ore", + "id": 21 + }, + { + "name": "minecraft:large_amethyst_bud", + "id": -330 + }, + { + "name": "minecraft:lava", + "id": 11 + }, + { + "name": "minecraft:lava_bucket", + "id": 365 + }, + { + "name": "minecraft:lead", + "id": 554 + }, + { + "name": "minecraft:leather", + "id": 383 + }, + { + "name": "minecraft:leather_boots", + "id": 340 + }, + { + "name": "minecraft:leather_chestplate", + "id": 338 + }, + { + "name": "minecraft:leather_helmet", + "id": 337 + }, + { + "name": "minecraft:leather_horse_armor", + "id": 537 + }, + { + "name": "minecraft:leather_leggings", + "id": 339 + }, + { + "name": "minecraft:leaves", + "id": 18 + }, + { + "name": "minecraft:leaves2", + "id": 161 + }, + { + "name": "minecraft:lectern", + "id": -194 + }, + { + "name": "minecraft:lever", + "id": 69 + }, + { + "name": "minecraft:light_block", + "id": -215 + }, + { + "name": "minecraft:light_blue_candle", + "id": -416 + }, + { + "name": "minecraft:light_blue_candle_cake", + "id": -433 + }, + { + "name": "minecraft:light_blue_carpet", + "id": -599 + }, + { + "name": "minecraft:light_blue_concrete", + "id": -630 + }, + { + "name": "minecraft:light_blue_concrete_powder", + "id": -711 + }, + { + "name": "minecraft:light_blue_dye", + "id": 409 + }, + { + "name": "minecraft:light_blue_glazed_terracotta", + "id": 223 + }, + { + "name": "minecraft:light_blue_shulker_box", + "id": -615 + }, + { + "name": "minecraft:light_blue_stained_glass", + "id": -675 + }, + { + "name": "minecraft:light_blue_stained_glass_pane", + "id": -645 + }, + { + "name": "minecraft:light_blue_terracotta", + "id": -726 + }, + { + "name": "minecraft:light_blue_wool", + "id": -562 + }, + { + "name": "minecraft:light_gray_candle", + "id": -421 + }, + { + "name": "minecraft:light_gray_candle_cake", + "id": -438 + }, + { + "name": "minecraft:light_gray_carpet", + "id": -604 + }, + { + "name": "minecraft:light_gray_concrete", + "id": -635 + }, + { + "name": "minecraft:light_gray_concrete_powder", + "id": -716 + }, + { + "name": "minecraft:light_gray_dye", + "id": 404 + }, + { + "name": "minecraft:light_gray_shulker_box", + "id": -620 + }, + { + "name": "minecraft:light_gray_stained_glass", + "id": -680 + }, + { + "name": "minecraft:light_gray_stained_glass_pane", + "id": -650 + }, + { + "name": "minecraft:light_gray_terracotta", + "id": -731 + }, + { + "name": "minecraft:light_gray_wool", + "id": -552 + }, + { + "name": "minecraft:light_weighted_pressure_plate", + "id": 147 + }, + { + "name": "minecraft:lightning_rod", + "id": -312 + }, + { + "name": "minecraft:lime_candle", + "id": -418 + }, + { + "name": "minecraft:lime_candle_cake", + "id": -435 + }, + { + "name": "minecraft:lime_carpet", + "id": -601 + }, + { + "name": "minecraft:lime_concrete", + "id": -632 + }, + { + "name": "minecraft:lime_concrete_powder", + "id": -713 + }, + { + "name": "minecraft:lime_dye", + "id": 407 + }, + { + "name": "minecraft:lime_glazed_terracotta", + "id": 225 + }, + { + "name": "minecraft:lime_shulker_box", + "id": -617 + }, + { + "name": "minecraft:lime_stained_glass", + "id": -677 + }, + { + "name": "minecraft:lime_stained_glass_pane", + "id": -647 + }, + { + "name": "minecraft:lime_terracotta", + "id": -728 + }, + { + "name": "minecraft:lime_wool", + "id": -559 + }, + { + "name": "minecraft:lingering_potion", + "id": 569 + }, + { + "name": "minecraft:lit_blast_furnace", + "id": -214 + }, + { + "name": "minecraft:lit_deepslate_redstone_ore", + "id": -404 + }, + { + "name": "minecraft:lit_furnace", + "id": 62 + }, + { + "name": "minecraft:lit_pumpkin", + "id": 91 + }, + { + "name": "minecraft:lit_redstone_lamp", + "id": 124 + }, + { + "name": "minecraft:lit_redstone_ore", + "id": 74 + }, + { + "name": "minecraft:lit_smoker", + "id": -199 + }, + { + "name": "minecraft:llama_spawn_egg", + "id": 475 + }, + { + "name": "minecraft:lodestone", + "id": -222 + }, + { + "name": "minecraft:lodestone_compass", + "id": 609 + }, + { + "name": "minecraft:log", + "id": 705 + }, + { + "name": "minecraft:log2", + "id": 708 + }, + { + "name": "minecraft:loom", + "id": -204 + }, + { + "name": "minecraft:magenta_candle", + "id": -415 + }, + { + "name": "minecraft:magenta_candle_cake", + "id": -432 + }, + { + "name": "minecraft:magenta_carpet", + "id": -598 + }, + { + "name": "minecraft:magenta_concrete", + "id": -629 + }, + { + "name": "minecraft:magenta_concrete_powder", + "id": -710 + }, + { + "name": "minecraft:magenta_dye", + "id": 410 + }, + { + "name": "minecraft:magenta_glazed_terracotta", + "id": 222 + }, + { + "name": "minecraft:magenta_shulker_box", + "id": -614 + }, + { + "name": "minecraft:magenta_stained_glass", + "id": -674 + }, + { + "name": "minecraft:magenta_stained_glass_pane", + "id": -644 + }, + { + "name": "minecraft:magenta_terracotta", + "id": -725 + }, + { + "name": "minecraft:magenta_wool", + "id": -565 + }, + { + "name": "minecraft:magma", + "id": 213 + }, + { + "name": "minecraft:magma_cream", + "id": 432 + }, + { + "name": "minecraft:magma_cube_spawn_egg", + "id": 457 + }, + { + "name": "minecraft:mangrove_boat", + "id": 642 + }, + { + "name": "minecraft:mangrove_button", + "id": -487 + }, + { + "name": "minecraft:mangrove_chest_boat", + "id": 651 + }, + { + "name": "minecraft:mangrove_door", + "id": 640 + }, + { + "name": "minecraft:mangrove_double_slab", + "id": -499 + }, + { + "name": "minecraft:mangrove_fence", + "id": -491 + }, + { + "name": "minecraft:mangrove_fence_gate", + "id": -492 + }, + { + "name": "minecraft:mangrove_hanging_sign", + "id": -508 + }, + { + "name": "minecraft:mangrove_leaves", + "id": -472 + }, + { + "name": "minecraft:mangrove_log", + "id": -484 + }, + { + "name": "minecraft:mangrove_planks", + "id": -486 + }, + { + "name": "minecraft:mangrove_pressure_plate", + "id": -490 + }, + { + "name": "minecraft:mangrove_propagule", + "id": -474 + }, + { + "name": "minecraft:mangrove_roots", + "id": -482 + }, + { + "name": "minecraft:mangrove_sign", + "id": 641 + }, + { + "name": "minecraft:mangrove_slab", + "id": -489 + }, + { + "name": "minecraft:mangrove_stairs", + "id": -488 + }, + { + "name": "minecraft:mangrove_standing_sign", + "id": -494 + }, + { + "name": "minecraft:mangrove_trapdoor", + "id": -496 + }, + { + "name": "minecraft:mangrove_wall_sign", + "id": -495 + }, + { + "name": "minecraft:mangrove_wood", + "id": -497 + }, + { + "name": "minecraft:medicine", + "id": 606 + }, + { + "name": "minecraft:medium_amethyst_bud", + "id": -331 + }, + { + "name": "minecraft:melon_block", + "id": 103 + }, + { + "name": "minecraft:melon_seeds", + "id": 293 + }, + { + "name": "minecraft:melon_slice", + "id": 272 + }, + { + "name": "minecraft:melon_stem", + "id": 105 + }, + { + "name": "minecraft:milk_bucket", + "id": 363 + }, + { + "name": "minecraft:minecart", + "id": 372 + }, + { + "name": "minecraft:miner_pottery_sherd", + "id": 675 + }, + { + "name": "minecraft:mob_spawner", + "id": 52 + }, + { + "name": "minecraft:mojang_banner_pattern", + "id": 591 + }, + { + "name": "minecraft:monster_egg", + "id": 97 + }, + { + "name": "minecraft:mooshroom_spawn_egg", + "id": 442 + }, + { + "name": "minecraft:moss_block", + "id": -320 + }, + { + "name": "minecraft:moss_carpet", + "id": -335 + }, + { + "name": "minecraft:mossy_cobblestone", + "id": 48 + }, + { + "name": "minecraft:mossy_cobblestone_stairs", + "id": -179 + }, + { + "name": "minecraft:mossy_stone_brick_stairs", + "id": -175 + }, + { + "name": "minecraft:mourner_pottery_sherd", + "id": 676 + }, + { + "name": "minecraft:moving_block", + "id": 250 + }, + { + "name": "minecraft:mud", + "id": -473 + }, + { + "name": "minecraft:mud_brick_double_slab", + "id": -479 + }, + { + "name": "minecraft:mud_brick_slab", + "id": -478 + }, + { + "name": "minecraft:mud_brick_stairs", + "id": -480 + }, + { + "name": "minecraft:mud_brick_wall", + "id": -481 + }, + { + "name": "minecraft:mud_bricks", + "id": -475 + }, + { + "name": "minecraft:muddy_mangrove_roots", + "id": -483 + }, + { + "name": "minecraft:mule_spawn_egg", + "id": 468 + }, + { + "name": "minecraft:mushroom_stew", + "id": 260 + }, + { + "name": "minecraft:music_disc_11", + "id": 551 + }, + { + "name": "minecraft:music_disc_13", + "id": 541 + }, + { + "name": "minecraft:music_disc_5", + "id": 643 + }, + { + "name": "minecraft:music_disc_blocks", + "id": 543 + }, + { + "name": "minecraft:music_disc_cat", + "id": 542 + }, + { + "name": "minecraft:music_disc_chirp", + "id": 544 + }, + { + "name": "minecraft:music_disc_far", + "id": 545 + }, + { + "name": "minecraft:music_disc_mall", + "id": 546 + }, + { + "name": "minecraft:music_disc_mellohi", + "id": 547 + }, + { + "name": "minecraft:music_disc_otherside", + "id": 633 + }, + { + "name": "minecraft:music_disc_pigstep", + "id": 627 + }, + { + "name": "minecraft:music_disc_relic", + "id": 701 + }, + { + "name": "minecraft:music_disc_stal", + "id": 548 + }, + { + "name": "minecraft:music_disc_strad", + "id": 549 + }, + { + "name": "minecraft:music_disc_wait", + "id": 552 + }, + { + "name": "minecraft:music_disc_ward", + "id": 550 + }, + { + "name": "minecraft:mutton", + "id": 557 + }, + { + "name": "minecraft:mycelium", + "id": 110 + }, + { + "name": "minecraft:name_tag", + "id": 555 + }, + { + "name": "minecraft:nautilus_shell", + "id": 577 + }, + { + "name": "minecraft:nether_brick", + "id": 112 + }, + { + "name": "minecraft:nether_brick_fence", + "id": 113 + }, + { + "name": "minecraft:nether_brick_stairs", + "id": 114 + }, + { + "name": "minecraft:nether_gold_ore", + "id": -288 + }, + { + "name": "minecraft:nether_sprouts", + "id": 628 + }, + { + "name": "minecraft:nether_star", + "id": 525 + }, + { + "name": "minecraft:nether_wart", + "id": 294 + }, + { + "name": "minecraft:nether_wart_block", + "id": 214 + }, + { + "name": "minecraft:netherbrick", + "id": 530 + }, + { + "name": "minecraft:netherite_axe", + "id": 613 + }, + { + "name": "minecraft:netherite_block", + "id": -270 + }, + { + "name": "minecraft:netherite_boots", + "id": 619 + }, + { + "name": "minecraft:netherite_chestplate", + "id": 617 + }, + { + "name": "minecraft:netherite_helmet", + "id": 616 + }, + { + "name": "minecraft:netherite_hoe", + "id": 614 + }, + { + "name": "minecraft:netherite_ingot", + "id": 615 + }, + { + "name": "minecraft:netherite_leggings", + "id": 618 + }, + { + "name": "minecraft:netherite_pickaxe", + "id": 612 + }, + { + "name": "minecraft:netherite_scrap", + "id": 620 + }, + { + "name": "minecraft:netherite_shovel", + "id": 611 + }, + { + "name": "minecraft:netherite_sword", + "id": 610 + }, + { + "name": "minecraft:netherite_upgrade_smithing_template", + "id": 684 + }, + { + "name": "minecraft:netherrack", + "id": 87 + }, + { + "name": "minecraft:netherreactor", + "id": 247 + }, + { + "name": "minecraft:normal_stone_stairs", + "id": -180 + }, + { + "name": "minecraft:noteblock", + "id": 25 + }, + { + "name": "minecraft:npc_spawn_egg", + "id": 472 + }, + { + "name": "minecraft:oak_boat", + "id": 377 + }, + { + "name": "minecraft:oak_chest_boat", + "id": 645 + }, + { + "name": "minecraft:oak_fence", + "id": 85 + }, + { + "name": "minecraft:oak_hanging_sign", + "id": -500 + }, + { + "name": "minecraft:oak_log", + "id": 17 + }, + { + "name": "minecraft:oak_sign", + "id": 360 + }, + { + "name": "minecraft:oak_stairs", + "id": 53 + }, + { + "name": "minecraft:observer", + "id": 251 + }, + { + "name": "minecraft:obsidian", + "id": 49 + }, + { + "name": "minecraft:ocelot_spawn_egg", + "id": 453 + }, + { + "name": "minecraft:ochre_froglight", + "id": -471 + }, + { + "name": "minecraft:orange_candle", + "id": -414 + }, + { + "name": "minecraft:orange_candle_cake", + "id": -431 + }, + { + "name": "minecraft:orange_carpet", + "id": -597 + }, + { + "name": "minecraft:orange_concrete", + "id": -628 + }, + { + "name": "minecraft:orange_concrete_powder", + "id": -709 + }, + { + "name": "minecraft:orange_dye", + "id": 411 + }, + { + "name": "minecraft:orange_glazed_terracotta", + "id": 221 + }, + { + "name": "minecraft:orange_shulker_box", + "id": -613 + }, + { + "name": "minecraft:orange_stained_glass", + "id": -673 + }, + { + "name": "minecraft:orange_stained_glass_pane", + "id": -643 + }, + { + "name": "minecraft:orange_terracotta", + "id": -724 + }, + { + "name": "minecraft:orange_wool", + "id": -557 + }, + { + "name": "minecraft:oxidized_copper", + "id": -343 + }, + { + "name": "minecraft:oxidized_cut_copper", + "id": -350 + }, + { + "name": "minecraft:oxidized_cut_copper_slab", + "id": -364 + }, + { + "name": "minecraft:oxidized_cut_copper_stairs", + "id": -357 + }, + { + "name": "minecraft:oxidized_double_cut_copper_slab", + "id": -371 + }, + { + "name": "minecraft:packed_ice", + "id": 174 + }, + { + "name": "minecraft:packed_mud", + "id": -477 + }, + { + "name": "minecraft:painting", + "id": 359 + }, + { + "name": "minecraft:panda_spawn_egg", + "id": 491 + }, + { + "name": "minecraft:paper", + "id": 388 + }, + { + "name": "minecraft:parrot_spawn_egg", + "id": 480 + }, + { + "name": "minecraft:pearlescent_froglight", + "id": -469 + }, + { + "name": "minecraft:phantom_membrane", + "id": 581 + }, + { + "name": "minecraft:phantom_spawn_egg", + "id": 488 + }, + { + "name": "minecraft:pig_spawn_egg", + "id": 439 + }, + { + "name": "minecraft:piglin_banner_pattern", + "id": 594 + }, + { + "name": "minecraft:piglin_brute_spawn_egg", + "id": 501 + }, + { + "name": "minecraft:piglin_spawn_egg", + "id": 499 + }, + { + "name": "minecraft:pillager_spawn_egg", + "id": 493 + }, + { + "name": "minecraft:pink_candle", + "id": -419 + }, + { + "name": "minecraft:pink_candle_cake", + "id": -436 + }, + { + "name": "minecraft:pink_carpet", + "id": -602 + }, + { + "name": "minecraft:pink_concrete", + "id": -633 + }, + { + "name": "minecraft:pink_concrete_powder", + "id": -714 + }, + { + "name": "minecraft:pink_dye", + "id": 406 + }, + { + "name": "minecraft:pink_glazed_terracotta", + "id": 226 + }, + { + "name": "minecraft:pink_petals", + "id": -549 + }, + { + "name": "minecraft:pink_shulker_box", + "id": -618 + }, + { + "name": "minecraft:pink_stained_glass", + "id": -678 + }, + { + "name": "minecraft:pink_stained_glass_pane", + "id": -648 + }, + { + "name": "minecraft:pink_terracotta", + "id": -729 + }, + { + "name": "minecraft:pink_wool", + "id": -566 + }, + { + "name": "minecraft:piston", + "id": 33 + }, + { + "name": "minecraft:piston_arm_collision", + "id": 34 + }, + { + "name": "minecraft:pitcher_crop", + "id": -574 + }, + { + "name": "minecraft:pitcher_plant", + "id": -612 + }, + { + "name": "minecraft:pitcher_pod", + "id": 297 + }, + { + "name": "minecraft:planks", + "id": 5 + }, + { + "name": "minecraft:plenty_pottery_sherd", + "id": 677 + }, + { + "name": "minecraft:podzol", + "id": 243 + }, + { + "name": "minecraft:pointed_dripstone", + "id": -308 + }, + { + "name": "minecraft:poisonous_potato", + "id": 282 + }, + { + "name": "minecraft:polar_bear_spawn_egg", + "id": 474 + }, + { + "name": "minecraft:polished_andesite_stairs", + "id": -174 + }, + { + "name": "minecraft:polished_basalt", + "id": -235 + }, + { + "name": "minecraft:polished_blackstone", + "id": -291 + }, + { + "name": "minecraft:polished_blackstone_brick_double_slab", + "id": -285 + }, + { + "name": "minecraft:polished_blackstone_brick_slab", + "id": -284 + }, + { + "name": "minecraft:polished_blackstone_brick_stairs", + "id": -275 + }, + { + "name": "minecraft:polished_blackstone_brick_wall", + "id": -278 + }, + { + "name": "minecraft:polished_blackstone_bricks", + "id": -274 + }, + { + "name": "minecraft:polished_blackstone_button", + "id": -296 + }, + { + "name": "minecraft:polished_blackstone_double_slab", + "id": -294 + }, + { + "name": "minecraft:polished_blackstone_pressure_plate", + "id": -295 + }, + { + "name": "minecraft:polished_blackstone_slab", + "id": -293 + }, + { + "name": "minecraft:polished_blackstone_stairs", + "id": -292 + }, + { + "name": "minecraft:polished_blackstone_wall", + "id": -297 + }, + { + "name": "minecraft:polished_deepslate", + "id": -383 + }, + { + "name": "minecraft:polished_deepslate_double_slab", + "id": -397 + }, + { + "name": "minecraft:polished_deepslate_slab", + "id": -384 + }, + { + "name": "minecraft:polished_deepslate_stairs", + "id": -385 + }, + { + "name": "minecraft:polished_deepslate_wall", + "id": -386 + }, + { + "name": "minecraft:polished_diorite_stairs", + "id": -173 + }, + { + "name": "minecraft:polished_granite_stairs", + "id": -172 + }, + { + "name": "minecraft:popped_chorus_fruit", + "id": 566 + }, + { + "name": "minecraft:porkchop", + "id": 262 + }, + { + "name": "minecraft:portal", + "id": 90 + }, + { + "name": "minecraft:potato", + "id": 280 + }, + { + "name": "minecraft:potatoes", + "id": 142 + }, + { + "name": "minecraft:potion", + "id": 428 + }, + { + "name": "minecraft:powder_snow", + "id": -306 + }, + { + "name": "minecraft:powder_snow_bucket", + "id": 370 + }, + { + "name": "minecraft:powered_comparator", + "id": 150 + }, + { + "name": "minecraft:powered_repeater", + "id": 94 + }, + { + "name": "minecraft:prismarine", + "id": 168 + }, + { + "name": "minecraft:prismarine_bricks_stairs", + "id": -4 + }, + { + "name": "minecraft:prismarine_crystals", + "id": 556 + }, + { + "name": "minecraft:prismarine_shard", + "id": 572 + }, + { + "name": "minecraft:prismarine_stairs", + "id": -2 + }, + { + "name": "minecraft:prize_pottery_sherd", + "id": 678 + }, + { + "name": "minecraft:pufferfish", + "id": 267 + }, + { + "name": "minecraft:pufferfish_bucket", + "id": 369 + }, + { + "name": "minecraft:pufferfish_spawn_egg", + "id": 483 + }, + { + "name": "minecraft:pumpkin", + "id": 86 + }, + { + "name": "minecraft:pumpkin_pie", + "id": 284 + }, + { + "name": "minecraft:pumpkin_seeds", + "id": 292 + }, + { + "name": "minecraft:pumpkin_stem", + "id": 104 + }, + { + "name": "minecraft:purple_candle", + "id": -423 + }, + { + "name": "minecraft:purple_candle_cake", + "id": -440 + }, + { + "name": "minecraft:purple_carpet", + "id": -606 + }, + { + "name": "minecraft:purple_concrete", + "id": -637 + }, + { + "name": "minecraft:purple_concrete_powder", + "id": -718 + }, + { + "name": "minecraft:purple_dye", + "id": 402 + }, + { + "name": "minecraft:purple_glazed_terracotta", + "id": 219 + }, + { + "name": "minecraft:purple_shulker_box", + "id": -622 + }, + { + "name": "minecraft:purple_stained_glass", + "id": -682 + }, + { + "name": "minecraft:purple_stained_glass_pane", + "id": -652 + }, + { + "name": "minecraft:purple_terracotta", + "id": -733 + }, + { + "name": "minecraft:purple_wool", + "id": -564 + }, + { + "name": "minecraft:purpur_block", + "id": 201 + }, + { + "name": "minecraft:purpur_stairs", + "id": 203 + }, + { + "name": "minecraft:quartz", + "id": 531 + }, + { + "name": "minecraft:quartz_block", + "id": 155 + }, + { + "name": "minecraft:quartz_bricks", + "id": -304 + }, + { + "name": "minecraft:quartz_ore", + "id": 153 + }, + { + "name": "minecraft:quartz_stairs", + "id": 156 + }, + { + "name": "minecraft:rabbit", + "id": 288 + }, + { + "name": "minecraft:rabbit_foot", + "id": 535 + }, + { + "name": "minecraft:rabbit_hide", + "id": 536 + }, + { + "name": "minecraft:rabbit_spawn_egg", + "id": 461 + }, + { + "name": "minecraft:rabbit_stew", + "id": 290 + }, + { + "name": "minecraft:rail", + "id": 66 + }, + { + "name": "minecraft:raiser_armor_trim_smithing_template", + "id": 698 + }, + { + "name": "minecraft:rapid_fertilizer", + "id": 604 + }, + { + "name": "minecraft:ravager_spawn_egg", + "id": 495 + }, + { + "name": "minecraft:raw_copper", + "id": 514 + }, + { + "name": "minecraft:raw_copper_block", + "id": -452 + }, + { + "name": "minecraft:raw_gold", + "id": 513 + }, + { + "name": "minecraft:raw_gold_block", + "id": -453 + }, + { + "name": "minecraft:raw_iron", + "id": 512 + }, + { + "name": "minecraft:raw_iron_block", + "id": -451 + }, + { + "name": "minecraft:recovery_compass", + "id": 653 + }, + { + "name": "minecraft:red_candle", + "id": -427 + }, + { + "name": "minecraft:red_candle_cake", + "id": -444 + }, + { + "name": "minecraft:red_carpet", + "id": -610 + }, + { + "name": "minecraft:red_concrete", + "id": -641 + }, + { + "name": "minecraft:red_concrete_powder", + "id": -722 + }, + { + "name": "minecraft:red_dye", + "id": 398 + }, + { + "name": "minecraft:red_flower", + "id": 38 + }, + { + "name": "minecraft:red_glazed_terracotta", + "id": 234 + }, + { + "name": "minecraft:red_mushroom", + "id": 40 + }, + { + "name": "minecraft:red_mushroom_block", + "id": 100 + }, + { + "name": "minecraft:red_nether_brick", + "id": 215 + }, + { + "name": "minecraft:red_nether_brick_stairs", + "id": -184 + }, + { + "name": "minecraft:red_sandstone", + "id": 179 + }, + { + "name": "minecraft:red_sandstone_stairs", + "id": 180 + }, + { + "name": "minecraft:red_shulker_box", + "id": -626 + }, + { + "name": "minecraft:red_stained_glass", + "id": -686 + }, + { + "name": "minecraft:red_stained_glass_pane", + "id": -656 + }, + { + "name": "minecraft:red_terracotta", + "id": -737 + }, + { + "name": "minecraft:red_wool", + "id": -556 + }, + { + "name": "minecraft:redstone", + "id": 375 + }, + { + "name": "minecraft:redstone_block", + "id": 152 + }, + { + "name": "minecraft:redstone_lamp", + "id": 123 + }, + { + "name": "minecraft:redstone_ore", + "id": 73 + }, + { + "name": "minecraft:redstone_torch", + "id": 76 + }, + { + "name": "minecraft:redstone_wire", + "id": 55 + }, + { + "name": "minecraft:reinforced_deepslate", + "id": -466 + }, + { + "name": "minecraft:repeater", + "id": 421 + }, + { + "name": "minecraft:repeating_command_block", + "id": 188 + }, + { + "name": "minecraft:reserved6", + "id": 255 + }, + { + "name": "minecraft:respawn_anchor", + "id": -272 + }, + { + "name": "minecraft:rib_armor_trim_smithing_template", + "id": 694 + }, + { + "name": "minecraft:rotten_flesh", + "id": 277 + }, + { + "name": "minecraft:saddle", + "id": 373 + }, + { + "name": "minecraft:salmon", + "id": 265 + }, + { + "name": "minecraft:salmon_bucket", + "id": 367 + }, + { + "name": "minecraft:salmon_spawn_egg", + "id": 484 + }, + { + "name": "minecraft:sand", + "id": 12 + }, + { + "name": "minecraft:sandstone", + "id": 24 + }, + { + "name": "minecraft:sandstone_stairs", + "id": 128 + }, + { + "name": "minecraft:sapling", + "id": 6 + }, + { + "name": "minecraft:scaffolding", + "id": -165 + }, + { + "name": "minecraft:sculk", + "id": -458 + }, + { + "name": "minecraft:sculk_catalyst", + "id": -460 + }, + { + "name": "minecraft:sculk_sensor", + "id": -307 + }, + { + "name": "minecraft:sculk_shrieker", + "id": -461 + }, + { + "name": "minecraft:sculk_vein", + "id": -459 + }, + { + "name": "minecraft:scute", + "id": 579 + }, + { + "name": "minecraft:sea_lantern", + "id": 169 + }, + { + "name": "minecraft:sea_pickle", + "id": -156 + }, + { + "name": "minecraft:seagrass", + "id": -130 + }, + { + "name": "minecraft:sentry_armor_trim_smithing_template", + "id": 685 + }, + { + "name": "minecraft:shaper_armor_trim_smithing_template", + "id": 699 + }, + { + "name": "minecraft:sheaf_pottery_sherd", + "id": 679 + }, + { + "name": "minecraft:shears", + "id": 423 + }, + { + "name": "minecraft:sheep_spawn_egg", + "id": 440 + }, + { + "name": "minecraft:shelter_pottery_sherd", + "id": 680 + }, + { + "name": "minecraft:shield", + "id": 357 + }, + { + "name": "minecraft:shroomlight", + "id": -230 + }, + { + "name": "minecraft:shulker_box", + "id": 713 + }, + { + "name": "minecraft:shulker_shell", + "id": 573 + }, + { + "name": "minecraft:shulker_spawn_egg", + "id": 471 + }, + { + "name": "minecraft:silence_armor_trim_smithing_template", + "id": 696 + }, + { + "name": "minecraft:silver_glazed_terracotta", + "id": 228 + }, + { + "name": "minecraft:silverfish_spawn_egg", + "id": 445 + }, + { + "name": "minecraft:skeleton_horse_spawn_egg", + "id": 469 + }, + { + "name": "minecraft:skeleton_spawn_egg", + "id": 446 + }, + { + "name": "minecraft:skull", + "id": 523 + }, + { + "name": "minecraft:skull_banner_pattern", + "id": 590 + }, + { + "name": "minecraft:skull_pottery_sherd", + "id": 681 + }, + { + "name": "minecraft:slime", + "id": 165 + }, + { + "name": "minecraft:slime_ball", + "id": 390 + }, + { + "name": "minecraft:slime_spawn_egg", + "id": 447 + }, + { + "name": "minecraft:small_amethyst_bud", + "id": -332 + }, + { + "name": "minecraft:small_dripleaf_block", + "id": -336 + }, + { + "name": "minecraft:smithing_table", + "id": -202 + }, + { + "name": "minecraft:smoker", + "id": -198 + }, + { + "name": "minecraft:smooth_basalt", + "id": -377 + }, + { + "name": "minecraft:smooth_quartz_stairs", + "id": -185 + }, + { + "name": "minecraft:smooth_red_sandstone_stairs", + "id": -176 + }, + { + "name": "minecraft:smooth_sandstone_stairs", + "id": -177 + }, + { + "name": "minecraft:smooth_stone", + "id": -183 + }, + { + "name": "minecraft:sniffer_egg", + "id": -596 + }, + { + "name": "minecraft:sniffer_spawn_egg", + "id": 502 + }, + { + "name": "minecraft:snort_pottery_sherd", + "id": 682 + }, + { + "name": "minecraft:snout_armor_trim_smithing_template", + "id": 693 + }, + { + "name": "minecraft:snow", + "id": 80 + }, + { + "name": "minecraft:snow_golem_spawn_egg", + "id": 507 + }, + { + "name": "minecraft:snow_layer", + "id": 78 + }, + { + "name": "minecraft:snowball", + "id": 376 + }, + { + "name": "minecraft:soul_campfire", + "id": 629 + }, + { + "name": "minecraft:soul_fire", + "id": -237 + }, + { + "name": "minecraft:soul_lantern", + "id": -269 + }, + { + "name": "minecraft:soul_sand", + "id": 88 + }, + { + "name": "minecraft:soul_soil", + "id": -236 + }, + { + "name": "minecraft:soul_torch", + "id": -268 + }, + { + "name": "minecraft:sparkler", + "id": 607 + }, + { + "name": "minecraft:spawn_egg", + "id": 717 + }, + { + "name": "minecraft:spider_eye", + "id": 278 + }, + { + "name": "minecraft:spider_spawn_egg", + "id": 448 + }, + { + "name": "minecraft:spire_armor_trim_smithing_template", + "id": 695 + }, + { + "name": "minecraft:splash_potion", + "id": 568 + }, + { + "name": "minecraft:sponge", + "id": 19 + }, + { + "name": "minecraft:spore_blossom", + "id": -321 + }, + { + "name": "minecraft:spruce_boat", + "id": 380 + }, + { + "name": "minecraft:spruce_button", + "id": -144 + }, + { + "name": "minecraft:spruce_chest_boat", + "id": 648 + }, + { + "name": "minecraft:spruce_door", + "id": 560 + }, + { + "name": "minecraft:spruce_fence", + "id": -579 + }, + { + "name": "minecraft:spruce_fence_gate", + "id": 183 + }, + { + "name": "minecraft:spruce_hanging_sign", + "id": -501 + }, + { + "name": "minecraft:spruce_log", + "id": -569 + }, + { + "name": "minecraft:spruce_pressure_plate", + "id": -154 + }, + { + "name": "minecraft:spruce_sign", + "id": 583 + }, + { + "name": "minecraft:spruce_stairs", + "id": 134 + }, + { + "name": "minecraft:spruce_standing_sign", + "id": -181 + }, + { + "name": "minecraft:spruce_trapdoor", + "id": -149 + }, + { + "name": "minecraft:spruce_wall_sign", + "id": -182 + }, + { + "name": "minecraft:spyglass", + "id": 632 + }, + { + "name": "minecraft:squid_spawn_egg", + "id": 452 + }, + { + "name": "minecraft:stained_glass", + "id": 711 + }, + { + "name": "minecraft:stained_glass_pane", + "id": 712 + }, + { + "name": "minecraft:stained_hardened_clay", + "id": 702 + }, + { + "name": "minecraft:standing_banner", + "id": 176 + }, + { + "name": "minecraft:standing_sign", + "id": 63 + }, + { + "name": "minecraft:stick", + "id": 322 + }, + { + "name": "minecraft:sticky_piston", + "id": 29 + }, + { + "name": "minecraft:sticky_piston_arm_collision", + "id": -217 + }, + { + "name": "minecraft:stone", + "id": 1 + }, + { + "name": "minecraft:stone_axe", + "id": 317 + }, + { + "name": "minecraft:stone_block_slab", + "id": 44 + }, + { + "name": "minecraft:stone_block_slab2", + "id": 182 + }, + { + "name": "minecraft:stone_block_slab3", + "id": -162 + }, + { + "name": "minecraft:stone_block_slab4", + "id": -166 + }, + { + "name": "minecraft:stone_brick_stairs", + "id": 109 + }, + { + "name": "minecraft:stone_button", + "id": 77 + }, + { + "name": "minecraft:stone_hoe", + "id": 332 + }, + { + "name": "minecraft:stone_pickaxe", + "id": 316 + }, + { + "name": "minecraft:stone_pressure_plate", + "id": 70 + }, + { + "name": "minecraft:stone_shovel", + "id": 315 + }, + { + "name": "minecraft:stone_stairs", + "id": 67 + }, + { + "name": "minecraft:stone_sword", + "id": 314 + }, + { + "name": "minecraft:stonebrick", + "id": 98 + }, + { + "name": "minecraft:stonecutter", + "id": 245 + }, + { + "name": "minecraft:stonecutter_block", + "id": -197 + }, + { + "name": "minecraft:stray_spawn_egg", + "id": 464 + }, + { + "name": "minecraft:strider_spawn_egg", + "id": 497 + }, + { + "name": "minecraft:string", + "id": 328 + }, + { + "name": "minecraft:stripped_acacia_log", + "id": -8 + }, + { + "name": "minecraft:stripped_bamboo_block", + "id": -528 + }, + { + "name": "minecraft:stripped_birch_log", + "id": -6 + }, + { + "name": "minecraft:stripped_cherry_log", + "id": -535 + }, + { + "name": "minecraft:stripped_cherry_wood", + "id": -545 + }, + { + "name": "minecraft:stripped_crimson_hyphae", + "id": -300 + }, + { + "name": "minecraft:stripped_crimson_stem", + "id": -240 + }, + { + "name": "minecraft:stripped_dark_oak_log", + "id": -9 + }, + { + "name": "minecraft:stripped_jungle_log", + "id": -7 + }, + { + "name": "minecraft:stripped_mangrove_log", + "id": -485 + }, + { + "name": "minecraft:stripped_mangrove_wood", + "id": -498 + }, + { + "name": "minecraft:stripped_oak_log", + "id": -10 + }, + { + "name": "minecraft:stripped_spruce_log", + "id": -5 + }, + { + "name": "minecraft:stripped_warped_hyphae", + "id": -301 + }, + { + "name": "minecraft:stripped_warped_stem", + "id": -241 + }, + { + "name": "minecraft:structure_block", + "id": 252 + }, + { + "name": "minecraft:structure_void", + "id": 217 + }, + { + "name": "minecraft:sugar", + "id": 418 + }, + { + "name": "minecraft:sugar_cane", + "id": 387 + }, + { + "name": "minecraft:suspicious_gravel", + "id": -573 + }, + { + "name": "minecraft:suspicious_sand", + "id": -529 + }, + { + "name": "minecraft:suspicious_stew", + "id": 597 + }, + { + "name": "minecraft:sweet_berries", + "id": 287 + }, + { + "name": "minecraft:sweet_berry_bush", + "id": -207 + }, + { + "name": "minecraft:tadpole_bucket", + "id": 637 + }, + { + "name": "minecraft:tadpole_spawn_egg", + "id": 636 + }, + { + "name": "minecraft:tallgrass", + "id": 31 + }, + { + "name": "minecraft:target", + "id": -239 + }, + { + "name": "minecraft:tide_armor_trim_smithing_template", + "id": 692 + }, + { + "name": "minecraft:tinted_glass", + "id": -334 + }, + { + "name": "minecraft:tnt", + "id": 46 + }, + { + "name": "minecraft:tnt_minecart", + "id": 532 + }, + { + "name": "minecraft:torch", + "id": 50 + }, + { + "name": "minecraft:torchflower", + "id": -568 + }, + { + "name": "minecraft:torchflower_crop", + "id": -567 + }, + { + "name": "minecraft:torchflower_seeds", + "id": 296 + }, + { + "name": "minecraft:totem_of_undying", + "id": 575 + }, + { + "name": "minecraft:trader_llama_spawn_egg", + "id": 655 + }, + { + "name": "minecraft:trapdoor", + "id": 96 + }, + { + "name": "minecraft:trapped_chest", + "id": 146 + }, + { + "name": "minecraft:trident", + "id": 553 + }, + { + "name": "minecraft:trip_wire", + "id": 132 + }, + { + "name": "minecraft:tripwire_hook", + "id": 131 + }, + { + "name": "minecraft:tropical_fish", + "id": 266 + }, + { + "name": "minecraft:tropical_fish_bucket", + "id": 368 + }, + { + "name": "minecraft:tropical_fish_spawn_egg", + "id": 481 + }, + { + "name": "minecraft:tube_coral", + "id": -131 + }, + { + "name": "minecraft:tuff", + "id": -333 + }, + { + "name": "minecraft:turtle_egg", + "id": -159 + }, + { + "name": "minecraft:turtle_helmet", + "id": 580 + }, + { + "name": "minecraft:turtle_spawn_egg", + "id": 487 + }, + { + "name": "minecraft:twisting_vines", + "id": -287 + }, + { + "name": "minecraft:underwater_torch", + "id": 239 + }, + { + "name": "minecraft:undyed_shulker_box", + "id": 205 + }, + { + "name": "minecraft:unknown", + "id": -305 + }, + { + "name": "minecraft:unlit_redstone_torch", + "id": 75 + }, + { + "name": "minecraft:unpowered_comparator", + "id": 149 + }, + { + "name": "minecraft:unpowered_repeater", + "id": 93 + }, + { + "name": "minecraft:verdant_froglight", + "id": -470 + }, + { + "name": "minecraft:vex_armor_trim_smithing_template", + "id": 691 + }, + { + "name": "minecraft:vex_spawn_egg", + "id": 478 + }, + { + "name": "minecraft:villager_spawn_egg", + "id": 451 + }, + { + "name": "minecraft:vindicator_spawn_egg", + "id": 476 + }, + { + "name": "minecraft:vine", + "id": 106 + }, + { + "name": "minecraft:wall_banner", + "id": 177 + }, + { + "name": "minecraft:wall_sign", + "id": 68 + }, + { + "name": "minecraft:wandering_trader_spawn_egg", + "id": 494 + }, + { + "name": "minecraft:ward_armor_trim_smithing_template", + "id": 689 + }, + { + "name": "minecraft:warden_spawn_egg", + "id": 639 + }, + { + "name": "minecraft:warped_button", + "id": -261 + }, + { + "name": "minecraft:warped_door", + "id": 624 + }, + { + "name": "minecraft:warped_double_slab", + "id": -267 + }, + { + "name": "minecraft:warped_fence", + "id": -257 + }, + { + "name": "minecraft:warped_fence_gate", + "id": -259 + }, + { + "name": "minecraft:warped_fungus", + "id": -229 + }, + { + "name": "minecraft:warped_fungus_on_a_stick", + "id": 625 + }, + { + "name": "minecraft:warped_hanging_sign", + "id": -507 + }, + { + "name": "minecraft:warped_hyphae", + "id": -298 + }, + { + "name": "minecraft:warped_nylium", + "id": -233 + }, + { + "name": "minecraft:warped_planks", + "id": -243 + }, + { + "name": "minecraft:warped_pressure_plate", + "id": -263 + }, + { + "name": "minecraft:warped_roots", + "id": -224 + }, + { + "name": "minecraft:warped_sign", + "id": 622 + }, + { + "name": "minecraft:warped_slab", + "id": -265 + }, + { + "name": "minecraft:warped_stairs", + "id": -255 + }, + { + "name": "minecraft:warped_standing_sign", + "id": -251 + }, + { + "name": "minecraft:warped_stem", + "id": -226 + }, + { + "name": "minecraft:warped_trapdoor", + "id": -247 + }, + { + "name": "minecraft:warped_wall_sign", + "id": -253 + }, + { + "name": "minecraft:warped_wart_block", + "id": -227 + }, + { + "name": "minecraft:water", + "id": 9 + }, + { + "name": "minecraft:water_bucket", + "id": 364 + }, + { + "name": "minecraft:waterlily", + "id": 111 + }, + { + "name": "minecraft:waxed_copper", + "id": -344 + }, + { + "name": "minecraft:waxed_cut_copper", + "id": -351 + }, + { + "name": "minecraft:waxed_cut_copper_slab", + "id": -365 + }, + { + "name": "minecraft:waxed_cut_copper_stairs", + "id": -358 + }, + { + "name": "minecraft:waxed_double_cut_copper_slab", + "id": -372 + }, + { + "name": "minecraft:waxed_exposed_copper", + "id": -345 + }, + { + "name": "minecraft:waxed_exposed_cut_copper", + "id": -352 + }, + { + "name": "minecraft:waxed_exposed_cut_copper_slab", + "id": -366 + }, + { + "name": "minecraft:waxed_exposed_cut_copper_stairs", + "id": -359 + }, + { + "name": "minecraft:waxed_exposed_double_cut_copper_slab", + "id": -373 + }, + { + "name": "minecraft:waxed_oxidized_copper", + "id": -446 + }, + { + "name": "minecraft:waxed_oxidized_cut_copper", + "id": -447 + }, + { + "name": "minecraft:waxed_oxidized_cut_copper_slab", + "id": -449 + }, + { + "name": "minecraft:waxed_oxidized_cut_copper_stairs", + "id": -448 + }, + { + "name": "minecraft:waxed_oxidized_double_cut_copper_slab", + "id": -450 + }, + { + "name": "minecraft:waxed_weathered_copper", + "id": -346 + }, + { + "name": "minecraft:waxed_weathered_cut_copper", + "id": -353 + }, + { + "name": "minecraft:waxed_weathered_cut_copper_slab", + "id": -367 + }, + { + "name": "minecraft:waxed_weathered_cut_copper_stairs", + "id": -360 + }, + { + "name": "minecraft:waxed_weathered_double_cut_copper_slab", + "id": -374 + }, + { + "name": "minecraft:wayfinder_armor_trim_smithing_template", + "id": 697 + }, + { + "name": "minecraft:weathered_copper", + "id": -342 + }, + { + "name": "minecraft:weathered_cut_copper", + "id": -349 + }, + { + "name": "minecraft:weathered_cut_copper_slab", + "id": -363 + }, + { + "name": "minecraft:weathered_cut_copper_stairs", + "id": -356 + }, + { + "name": "minecraft:weathered_double_cut_copper_slab", + "id": -370 + }, + { + "name": "minecraft:web", + "id": 30 + }, + { + "name": "minecraft:weeping_vines", + "id": -231 + }, + { + "name": "minecraft:wheat", + "id": 336 + }, + { + "name": "minecraft:wheat_seeds", + "id": 291 + }, + { + "name": "minecraft:white_candle", + "id": -413 + }, + { + "name": "minecraft:white_candle_cake", + "id": -430 + }, + { + "name": "minecraft:white_carpet", + "id": 171 + }, + { + "name": "minecraft:white_concrete", + "id": 236 + }, + { + "name": "minecraft:white_concrete_powder", + "id": 237 + }, + { + "name": "minecraft:white_dye", + "id": 412 + }, + { + "name": "minecraft:white_glazed_terracotta", + "id": 220 + }, + { + "name": "minecraft:white_shulker_box", + "id": 218 + }, + { + "name": "minecraft:white_stained_glass", + "id": 241 + }, + { + "name": "minecraft:white_stained_glass_pane", + "id": 160 + }, + { + "name": "minecraft:white_terracotta", + "id": 159 + }, + { + "name": "minecraft:white_wool", + "id": 35 + }, + { + "name": "minecraft:wild_armor_trim_smithing_template", + "id": 688 + }, + { + "name": "minecraft:witch_spawn_egg", + "id": 454 + }, + { + "name": "minecraft:wither_rose", + "id": -216 + }, + { + "name": "minecraft:wither_skeleton_spawn_egg", + "id": 466 + }, + { + "name": "minecraft:wither_spawn_egg", + "id": 509 + }, + { + "name": "minecraft:wolf_spawn_egg", + "id": 441 + }, + { + "name": "minecraft:wood", + "id": -212 + }, + { + "name": "minecraft:wooden_axe", + "id": 313 + }, + { + "name": "minecraft:wooden_button", + "id": 143 + }, + { + "name": "minecraft:wooden_door", + "id": 361 + }, + { + "name": "minecraft:wooden_hoe", + "id": 331 + }, + { + "name": "minecraft:wooden_pickaxe", + "id": 312 + }, + { + "name": "minecraft:wooden_pressure_plate", + "id": 72 + }, + { + "name": "minecraft:wooden_shovel", + "id": 311 + }, + { + "name": "minecraft:wooden_slab", + "id": 158 + }, + { + "name": "minecraft:wooden_sword", + "id": 310 + }, + { + "name": "minecraft:wool", + "id": 703 + }, + { + "name": "minecraft:writable_book", + "id": 517 + }, + { + "name": "minecraft:written_book", + "id": 518 + }, + { + "name": "minecraft:yellow_candle", + "id": -417 + }, + { + "name": "minecraft:yellow_candle_cake", + "id": -434 + }, + { + "name": "minecraft:yellow_carpet", + "id": -600 + }, + { + "name": "minecraft:yellow_concrete", + "id": -631 + }, + { + "name": "minecraft:yellow_concrete_powder", + "id": -712 + }, + { + "name": "minecraft:yellow_dye", + "id": 408 + }, + { + "name": "minecraft:yellow_flower", + "id": 37 + }, + { + "name": "minecraft:yellow_glazed_terracotta", + "id": 224 + }, + { + "name": "minecraft:yellow_shulker_box", + "id": -616 + }, + { + "name": "minecraft:yellow_stained_glass", + "id": -676 + }, + { + "name": "minecraft:yellow_stained_glass_pane", + "id": -646 + }, + { + "name": "minecraft:yellow_terracotta", + "id": -727 + }, + { + "name": "minecraft:yellow_wool", + "id": -558 + }, + { + "name": "minecraft:zoglin_spawn_egg", + "id": 500 + }, + { + "name": "minecraft:zombie_horse_spawn_egg", + "id": 470 + }, + { + "name": "minecraft:zombie_pigman_spawn_egg", + "id": 450 + }, + { + "name": "minecraft:zombie_spawn_egg", + "id": 449 + }, + { + "name": "minecraft:zombie_villager_spawn_egg", + "id": 479 + } +] \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 579f9de31..9488ae3b6 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,10 +9,10 @@ netty = "4.1.80.Final" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol = "3.0.0.Beta1-20230908.171156-106" -protocol-connection = "3.0.0.Beta1-20230908.171156-105" +protocol = "3.0.0.Beta1-20231016.115644-107" +protocol-connection = "3.0.0.Beta1-20231016.115644-106" raknet = "1.0.0.CR1-20230703.195238-9" -blockstateupdater="1.20.30-20230918.203831-4" +blockstateupdater="1.20.40-20231016.111746-1" mcauthlib = "d9d773e" mcprotocollib = "1.20.2-1-20231003.141424-6" adventure = "4.14.0" From 53960c9d46641644868ec3c1be5ae63a6aa0a97d Mon Sep 17 00:00:00 2001 From: Hasan <52300558+hasankayra04@users.noreply.github.com> Date: Fri, 20 Oct 2023 08:02:10 +0300 Subject: [PATCH 03/86] update readme version for 1.20.40 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 8a1f456c7..07fb34209 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! -### Currently supporting Minecraft Bedrock 1.20.0 - 1.20.32 and Minecraft Java 1.20.2 +### Currently supporting Minecraft Bedrock 1.20.0 - 1.20.40 and Minecraft Java 1.20.2 ## Setting Up Take a look [here](https://wiki.geysermc.org/geyser/setup/) for how to set up Geyser. From 450e3b61fe4591359003f037d7207d7e69ba3b8d Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 20 Oct 2023 20:14:16 +0200 Subject: [PATCH 04/86] Bring back accidentally removed MTU option (#4229) --- .../java/org/geysermc/geyser/network/netty/GeyserServer.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java index 6fbb29157..c89da0bdd 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java @@ -171,10 +171,12 @@ public final class GeyserServer { GeyserServerInitializer serverInitializer = new GeyserServerInitializer(this.geyser); playerGroup = serverInitializer.getEventLoopGroup(); + this.geyser.getLogger().debug("Setting MTU to " + this.geyser.getConfig().getMtu()); return new ServerBootstrap() .channelFactory(RakChannelFactory.server(TRANSPORT.datagramChannel())) .group(group) .option(RakChannelOption.RAK_HANDLE_PING, true) + .option(RakChannelOption.RAK_MAX_MTU, this.geyser.getConfig().getMtu()) .childHandler(serverInitializer); } From 51236f7a5997f6405427838932c072c73e49c0b5 Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 20 Oct 2023 22:17:43 +0200 Subject: [PATCH 05/86] Let the fabric module really use Java 17 (#4231) * Let the fabric module really use java 17 * Remove unnecessary target/source compat; handled by indra instead --- bootstrap/fabric/build.gradle.kts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bootstrap/fabric/build.gradle.kts b/bootstrap/fabric/build.gradle.kts index e392a4ef9..07de70f60 100644 --- a/bootstrap/fabric/build.gradle.kts +++ b/bootstrap/fabric/build.gradle.kts @@ -5,9 +5,10 @@ plugins { id("com.modrinth.minotaur") version "2.+" } -java { - targetCompatibility = JavaVersion.VERSION_17 - sourceCompatibility = JavaVersion.VERSION_17 +indra { + javaVersions { + target(17) + } } dependencies { From b4290d5be462b8352fd0a2dd8b30ac61c98b8041 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 24 Oct 2023 01:41:02 +0200 Subject: [PATCH 06/86] Versioned potion mappings (#4239) --- .../geyser/registry/loader/PotionMixRegistryLoader.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java index 88d2ef29d..7d5061382 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java @@ -31,7 +31,6 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.PotionMixData; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; @@ -115,7 +114,7 @@ public class PotionMixRegistryLoader implements RegistryLoader Date: Thu, 26 Oct 2023 08:16:24 -0700 Subject: [PATCH 07/86] Reduce Frequency of Crashes Due to Dispensers, Droppers, and Chiseled Bookshelves (#4248) * Revert to subchunk v8; reduces freq of #4240 * Full resolution --- .../geyser/level/chunk/GeyserChunkSection.java | 18 ++++++++---------- .../JavaLevelChunkWithLightTranslator.java | 12 ++++++------ .../org/geysermc/geyser/util/ChunkUtils.java | 2 +- 3 files changed, 15 insertions(+), 17 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java index 58f61fb4a..f3e6b8399 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java @@ -30,19 +30,18 @@ import org.cloudburstmc.protocol.common.util.Preconditions; public class GeyserChunkSection { - // As of at least 1.19.80 - private static final int CHUNK_SECTION_VERSION = 9; + // Temporary reversion to v8 as it reduces the frequnecy of https://github.com/GeyserMC/Geyser/issues/4240 + // This does not fully resolve the issue so a better solution is still needed + private static final int CHUNK_SECTION_VERSION = 8; private final BlockStorage[] storage; - private final int sectionY; - public GeyserChunkSection(int airBlockId, int sectionY) { - this(new BlockStorage[]{new BlockStorage(airBlockId), new BlockStorage(airBlockId)}, sectionY); + public GeyserChunkSection(int airBlockId) { + this(new BlockStorage[]{new BlockStorage(airBlockId), new BlockStorage(airBlockId)}); } - public GeyserChunkSection(BlockStorage[] storage, int sectionY) { + public GeyserChunkSection(BlockStorage[] storage) { this.storage = storage; - this.sectionY = sectionY; } public int getFullBlock(int x, int y, int z, int layer) { @@ -61,7 +60,6 @@ public class GeyserChunkSection { buffer.writeByte(CHUNK_SECTION_VERSION); buffer.writeByte(this.storage.length); // Required for chunk version 9+ - buffer.writeByte(this.sectionY); for (BlockStorage blockStorage : this.storage) { blockStorage.writeToNetwork(buffer); } @@ -88,12 +86,12 @@ public class GeyserChunkSection { return true; } - public GeyserChunkSection copy(int sectionY) { + public GeyserChunkSection copy() { BlockStorage[] storage = new BlockStorage[this.storage.length]; for (int i = 0; i < storage.length; i++) { storage[i] = this.storage[i].copy(); } - return new GeyserChunkSection(storage, sectionY); + return new GeyserChunkSection(storage); } public static int blockPosition(int x, int y, int z) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 080d5df8e..85eec40e0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -154,7 +154,7 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator Date: Fri, 3 Nov 2023 16:58:02 +0100 Subject: [PATCH 08/86] Fix text displays on 1.20.2 It seems like 1.20.2 added one more field to base displays (https://wiki.vg/Entity_metadata#Display), and a few more to text displays: https://wiki.vg/Entity_metadata#Text_Display (#4268) --- .../org/geysermc/geyser/entity/EntityDefinitions.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java index a88eff111..e9d49fbd8 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -299,8 +299,9 @@ public final class EntityDefinitions { .build(); EntityDefinition displayBase = EntityDefinition.inherited(entityBase.factory(), entityBase) - .addTranslator(null) // Interpolation start ticks - .addTranslator(null) // Interpolation duration ID + .addTranslator(null) // Interpolation delay + .addTranslator(null) // Transformation interpolation duration + .addTranslator(null) // Position/Rotation interpolation duration .addTranslator(null) // Translation .addTranslator(null) // Scale .addTranslator(null) // Left rotation @@ -318,6 +319,10 @@ public final class EntityDefinitions { .type(EntityType.TEXT_DISPLAY) .identifier("minecraft:armor_stand") .addTranslator(MetadataType.CHAT, TextDisplayEntity::setText) + .addTranslator(null) // Line width + .addTranslator(null) // Background color + .addTranslator(null) // Text opacity + .addTranslator(null) // Bit mask .build(); INTERACTION = EntityDefinition.inherited(InteractionEntity::new, entityBase) From 4ff8b7bff44436f55248465eeb51c2f12c46814e Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 3 Nov 2023 17:09:34 +0100 Subject: [PATCH 09/86] Bump mcpl to fix issues with the ClientboundLoginDisconnectPacket (#4264) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9488ae3b6..a5b1a79c3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ protocol-connection = "3.0.0.Beta1-20231016.115644-106" raknet = "1.0.0.CR1-20230703.195238-9" blockstateupdater="1.20.40-20231016.111746-1" mcauthlib = "d9d773e" -mcprotocollib = "1.20.2-1-20231003.141424-6" +mcprotocollib = "1.20.2-1-20231101.141901-7" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From 644082ae84111e07923ab86d73fd0445cd9b3594 Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 3 Nov 2023 17:16:09 +0100 Subject: [PATCH 10/86] Fix `/geyser reload` on Velocity (#4258) * Fix /geyser reload on Velocity * No need to create/init a new injector on Velocity * No need to warn about "abnormally long startup" on Bungee when we're reloading. And, as on velocity, no need to re-inject --- .../bungeecord/GeyserBungeePlugin.java | 17 ++++++++++++++--- .../velocity/GeyserVelocityPlugin.java | 18 ++++++++++++++++-- 2 files changed, 30 insertions(+), 5 deletions(-) diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java index 86f283329..e58abc3b4 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java @@ -70,6 +70,8 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { private GeyserImpl geyser; + private static boolean INITIALIZED = false; + @Override public void onLoad() { GeyserLocale.init(this); @@ -133,7 +135,12 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { // Big hack - Bungee does not provide us an event to listen to, so schedule a repeating // task that waits for a field to be filled which is set after the plugin enable // process is complete - this.awaitStartupCompletion(0); + if (!INITIALIZED) { + this.awaitStartupCompletion(0); + } else { + // No need to "wait" for startup completion, just start Geyser - we're reloading. + this.postStartup(); + } } @SuppressWarnings("unchecked") @@ -166,8 +173,10 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { private void postStartup() { GeyserImpl.start(); - this.geyserInjector = new GeyserBungeeInjector(this); - this.geyserInjector.initializeLocalChannel(this); + if (!INITIALIZED) { + this.geyserInjector = new GeyserBungeeInjector(this); + this.geyserInjector.initializeLocalChannel(this); + } this.geyserCommandManager = new GeyserCommandManager(geyser); this.geyserCommandManager.init(); @@ -187,6 +196,8 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { } else { this.geyserBungeePingPassthrough = new GeyserBungeePingPassthrough(getProxy()); } + + INITIALIZED = true; } @Override diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java index dbbd30c41..93b57d712 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java @@ -64,6 +64,11 @@ import java.util.UUID; @Plugin(id = "geyser", name = GeyserImpl.NAME + "-Velocity", version = GeyserImpl.VERSION, url = "https://geysermc.org", authors = "GeyserMC") public class GeyserVelocityPlugin implements GeyserBootstrap { + /** + * Determines if the plugin has been ran once before, including before /geyser reload. + */ + private static boolean INITIALIZED = false; + @Inject private Logger logger; @@ -114,13 +119,20 @@ public class GeyserVelocityPlugin implements GeyserBootstrap { GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); this.geyser = GeyserImpl.load(PlatformType.VELOCITY, this); + + // Hack: Normally triggered by ListenerBoundEvent, but that doesn't fire on /geyser reload + if (INITIALIZED) { + this.postStartup(); + } } private void postStartup() { GeyserImpl.start(); - this.geyserInjector = new GeyserVelocityInjector(proxyServer); - // Will be initialized after the proxy has been bound + if (!INITIALIZED) { + this.geyserInjector = new GeyserVelocityInjector(proxyServer); + // Will be initialized after the proxy has been bound + } this.geyserCommandManager = new GeyserCommandManager(geyser); this.geyserCommandManager.init(); @@ -195,6 +207,8 @@ public class GeyserVelocityPlugin implements GeyserBootstrap { geyserInjector.initializeLocalChannel(this); } } + + INITIALIZED = true; } @Override From ec526a798d3a4325a77f07373a55323e8118b43e Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 3 Nov 2023 17:22:55 +0100 Subject: [PATCH 11/86] Send cooldown when punching air (#4257) --- .../bedrock/entity/player/BedrockActionTranslator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java index bff097248..611ca5824 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockActionTranslator.java @@ -55,6 +55,7 @@ import org.geysermc.geyser.translator.inventory.item.CustomItemTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.BlockUtils; +import org.geysermc.geyser.util.CooldownUtils; @Translator(packet = PlayerActionPacket.class) public class BedrockActionTranslator extends PacketTranslator { @@ -281,6 +282,10 @@ public class BedrockActionTranslator extends PacketTranslator Date: Sat, 4 Nov 2023 16:06:23 +0100 Subject: [PATCH 12/86] Move "unknown entity definition" spam to debug level (#4270) --- .../protocol/java/entity/spawn/JavaAddEntityTranslator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java index c17c9955d..ab7163650 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/spawn/JavaAddEntityTranslator.java @@ -49,7 +49,7 @@ public class JavaAddEntityTranslator extends PacketTranslator definition = Registries.ENTITY_DEFINITIONS.get(packet.getType()); if (definition == null) { - session.getGeyser().getLogger().warning("Could not find an entity definition with type " + packet.getType()); + session.getGeyser().getLogger().debug("Could not find an entity definition with type " + packet.getType()); return; } From 574dad015d11c072d9fc7c5989d94f9689078b77 Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 4 Nov 2023 18:59:02 +0100 Subject: [PATCH 13/86] Fix: Display entities only being visible when directly looked at (#4271) --- .../org/geysermc/geyser/entity/type/TextDisplayEntity.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java index f2671f7a9..703d5210b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; +import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import net.kyori.adventure.text.Component; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -49,6 +50,12 @@ public class TextDisplayEntity extends Entity { this.dirtyMetadata.put(EntityDataTypes.NAMETAG_ALWAYS_SHOW, (byte) 1); } + @Override + public void setDisplayNameVisible(BooleanEntityMetadata entityMetadata) { + // Don't allow the display name to be hidden - messes with our armor stand. + // On JE: Hiding the display name still shows the display entity text. + } + public void setText(EntityMetadata entityMetadata) { this.dirtyMetadata.put(EntityDataTypes.NAME, MessageTranslator.convertMessage(entityMetadata.getValue())); } From 06663bcafd8ac19f4072b813fe091e5dbbf4d3de Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 6 Nov 2023 16:17:41 +0100 Subject: [PATCH 14/86] Fix: Don't mistakingly assume that Geyser-Velocity initialized (#4276) * Fix: ListenerBoundEvent could set `INITIALIZED` to true, even if we did not initialize yet - move that to postStartup() instead. * only assign INITIALIZED once, and only after the correct listenertype bound. --- .../geyser/platform/velocity/GeyserVelocityPlugin.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java index 93b57d712..d7c6c588e 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java @@ -206,9 +206,9 @@ public class GeyserVelocityPlugin implements GeyserBootstrap { // After this bound, we know that the channel initializer cannot change without it being ineffective for Velocity, too geyserInjector.initializeLocalChannel(this); } - } - INITIALIZED = true; + INITIALIZED = true; + } } @Override From aa899af90812af4f726dc971ef30a81bd10786d4 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 8 Nov 2023 00:23:56 +0100 Subject: [PATCH 15/86] Clear bossbars & entity attributes on server switching (#4278) * This ensures bossbars are cleared on server switch. Additionally, this clears the EntityCache - which should resolve issues around air supply/hearts persisting visually. * - Also reset attributes on server switch, aswell as air --- .../entity/type/player/SessionPlayerEntity.java | 13 +++++++++++++ .../geysermc/geyser/session/cache/EntityCache.java | 5 +++++ .../protocol/java/JavaLoginTranslator.java | 13 ++++++++----- 3 files changed, 26 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java index bcd32253f..58b7ffddb 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java @@ -254,4 +254,17 @@ public class SessionPlayerEntity extends PlayerEntity { public UUID getTabListUuid() { return session.getAuthData().uuid(); } + + public void resetMetadata() { + // Reset all metadata to their default values + // This is used when a player respawns + this.initializeMetadata(); + + // Reset air + this.resetAir(); + } + + public void resetAir() { + this.setAirSupply(getMaxAir()); + } } diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java index 9dc89215a..8a4b9cb6c 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/EntityCache.java @@ -162,4 +162,9 @@ public class EntityCache { public List getTickableEntities() { return tickableEntities; } + + public void removeAllBossBars() { + bossBars.values().forEach(BossBar::removeBossBar); + bossBars.clear(); + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java index 3b9f29b89..e7539bd0f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java @@ -64,12 +64,17 @@ public class JavaLoginTranslator extends PacketTranslator Date: Thu, 9 Nov 2023 08:44:13 +0100 Subject: [PATCH 16/86] Add ability to set molang tags for custom items (#4041) * Start on custom molang tags with custom items * geyser_custom instead of geyser item tag * Address reviews, add custom namespace ("geyser_custom") to tags * use isBlank() instead of isEmpty() * More efficient item tag setting Co-authored-by: Konicai <71294714+konicai@users.noreply.github.com> * tags instead of temp * Merge in master, adapt to changes in the MappingsReader, delete unused ToolBreakSpeedsUtils class * oops * clean diff * Change namespace from `geyser_custom` to just `geyser` * Don't force a namespace at all; just like blocks don't * Tags for items are now, as blocks, NonNull. Additionally, calling the .tags() builder multiple times will not add both sets of tags, but replace the existing tag set * Remove @NotNull usage in favor of @NonNull * Allow setting null for tags, but ensure that .tags() is always non-null * Fix nullable annotation on tags method in the builder interface --- .../component/CustomBlockComponents.java | 2 +- .../api/item/custom/CustomItemData.java | 12 ++ .../item/custom/NonVanillaCustomItemData.java | 3 + .../geyser/item/GeyserCustomItemData.java | 31 +++- .../item/GeyserNonVanillaCustomItemData.java | 7 +- .../item/components/ToolBreakSpeedsUtils.java | 174 ------------------ .../block/GeyserCustomBlockComponents.java | 13 +- .../mappings/versions/MappingsReader_v1.java | 6 + .../CustomItemRegistryPopulator.java | 28 ++- 9 files changed, 85 insertions(+), 191 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java index 036723092..63788df8e 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/CustomBlockComponents.java @@ -185,7 +185,7 @@ public interface CustomBlockComponents { Builder placeAir(boolean placeAir); - Builder tags(Set tags); + Builder tags(@Nullable Set tags); CustomBlockComponents build(); } diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java index d256b9ac0..404679e60 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/CustomItemData.java @@ -29,6 +29,8 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.GeyserApi; +import java.util.Set; + /** * This is used to store data for a custom item. */ @@ -89,6 +91,14 @@ public interface CustomItemData { */ @Nullable CustomRenderOffsets renderOffsets(); + /** + * Gets the item's set of tags that can be used in Molang. + * Equivalent to "tag:some_tag" + * + * @return the item's tags, if they exist + */ + @NonNull Set tags(); + static CustomItemData.Builder builder() { return GeyserApi.api().provider(CustomItemData.Builder.class); } @@ -113,6 +123,8 @@ public interface CustomItemData { Builder renderOffsets(@Nullable CustomRenderOffsets renderOffsets); + Builder tags(@Nullable Set tags); + CustomItemData build(); } } diff --git a/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java b/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java index 0a09f6958..616a5bba6 100644 --- a/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java +++ b/api/src/main/java/org/geysermc/geyser/api/item/custom/NonVanillaCustomItemData.java @@ -239,6 +239,9 @@ public interface NonVanillaCustomItemData extends CustomItemData { @Override Builder renderOffsets(@Nullable CustomRenderOffsets renderOffsets); + @Override + Builder tags(@Nullable Set tags); + NonVanillaCustomItemData build(); } } diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java index 3535eaf4d..c86c370bb 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java @@ -28,10 +28,14 @@ package org.geysermc.geyser.item; import lombok.EqualsAndHashCode; import lombok.ToString; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; -import org.jetbrains.annotations.NotNull; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; @EqualsAndHashCode @ToString @@ -44,6 +48,7 @@ public class GeyserCustomItemData implements CustomItemData { private final boolean displayHandheld; private final int textureSize; private final CustomRenderOffsets renderOffsets; + private final Set tags; public GeyserCustomItemData(String name, CustomItemOptions customItemOptions, @@ -52,7 +57,8 @@ public class GeyserCustomItemData implements CustomItemData { boolean allowOffhand, boolean displayHandheld, int textureSize, - CustomRenderOffsets renderOffsets) { + CustomRenderOffsets renderOffsets, + Set tags) { this.name = name; this.customItemOptions = customItemOptions; this.displayName = displayName; @@ -61,10 +67,11 @@ public class GeyserCustomItemData implements CustomItemData { this.displayHandheld = displayHandheld; this.textureSize = textureSize; this.renderOffsets = renderOffsets; + this.tags = tags; } @Override - public @NotNull String name() { + public @NonNull String name() { return name; } @@ -74,12 +81,12 @@ public class GeyserCustomItemData implements CustomItemData { } @Override - public @NotNull String displayName() { + public @NonNull String displayName() { return displayName; } @Override - public @NotNull String icon() { + public @NonNull String icon() { return icon; } @@ -103,6 +110,11 @@ public class GeyserCustomItemData implements CustomItemData { return renderOffsets; } + @Override + public @NonNull Set tags() { + return tags; + } + public static class CustomItemDataBuilder implements Builder { protected String name = null; protected CustomItemOptions customItemOptions = null; @@ -113,6 +125,7 @@ public class GeyserCustomItemData implements CustomItemData { protected boolean displayHandheld = false; protected int textureSize = 16; protected CustomRenderOffsets renderOffsets = null; + protected Set tags = new HashSet<>(); @Override public Builder name(@NonNull String name) { @@ -162,6 +175,12 @@ public class GeyserCustomItemData implements CustomItemData { return this; } + @Override + public Builder tags(@Nullable Set tags) { + this.tags = Objects.requireNonNullElseGet(tags, Set::of); + return this; + } + @Override public CustomItemData build() { if (this.name == null || this.customItemOptions == null) { @@ -174,7 +193,7 @@ public class GeyserCustomItemData implements CustomItemData { if (this.icon == null) { this.icon = this.name; } - return new GeyserCustomItemData(this.name, this.customItemOptions, this.displayName, this.icon, this.allowOffhand, this.displayHandheld, this.textureSize, this.renderOffsets); + return new GeyserCustomItemData(this.name, this.customItemOptions, this.displayName, this.icon, this.allowOffhand, this.displayHandheld, this.textureSize, this.renderOffsets, this.tags); } } } diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java index d6731e3b8..47b5aed33 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java @@ -61,7 +61,7 @@ public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData i public GeyserNonVanillaCustomItemData(NonVanillaCustomItemDataBuilder builder) { super(builder.name, builder.customItemOptions, builder.displayName, builder.icon, builder.allowOffhand, - builder.displayHandheld, builder.textureSize, builder.renderOffsets); + builder.displayHandheld, builder.textureSize, builder.renderOffsets, builder.tags); this.identifier = builder.identifier; this.javaId = builder.javaId; @@ -237,6 +237,11 @@ public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData i return (NonVanillaCustomItemData.Builder) super.renderOffsets(renderOffsets); } + @Override + public NonVanillaCustomItemData.Builder tags(@Nullable Set tags) { + return (NonVanillaCustomItemData.Builder) super.tags(tags); + } + @Override public NonVanillaCustomItemData.Builder identifier(@NonNull String identifier) { this.identifier = identifier; diff --git a/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java b/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java deleted file mode 100644 index efefee946..000000000 --- a/core/src/main/java/org/geysermc/geyser/item/components/ToolBreakSpeedsUtils.java +++ /dev/null @@ -1,174 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.item.components; - -import org.cloudburstmc.nbt.NbtMap; -import org.cloudburstmc.nbt.NbtType; - -import java.util.ArrayList; -import java.util.List; - -public class ToolBreakSpeedsUtils { - public static int toolTierToSpeed(String toolTier) { - ToolTier tier = ToolTier.getByName(toolTier); - if (tier != null) { - return tier.getSpeed(); - } - - return 0; - } - - private static NbtMap createTagBreakSpeed(int speed, String... tags) { - StringBuilder builder = new StringBuilder("query.any_tag('"); - builder.append(tags[0]); - for (int i = 1; i < tags.length; i++) { - builder.append("', '").append(tags[i]); - } - builder.append("')"); - - return NbtMap.builder() - .putCompound("block", NbtMap.builder() - .putString("tags", builder.toString()) - .build()) - .putCompound("on_dig", NbtMap.builder() - .putCompound("condition", NbtMap.builder() - .putString("expression", "") - .putInt("version", -1) - .build()) - .putString("event", "tool_durability") - .putString("target", "self") - .build()) - .putInt("speed", speed) - .build(); - } - - private static NbtMap createBreakSpeed(int speed, String block) { - return NbtMap.builder() - .putCompound("block", NbtMap.builder() - .putString("name", block).build()) - .putCompound("on_dig", NbtMap.builder() - .putCompound("condition", NbtMap.builder() - .putString("expression", "") - .putInt("version", -1) - .build()) - .putString("event", "tool_durability") - .putString("target", "self") - .build()) - .putInt("speed", speed) - .build(); - } - - private static NbtMap createDigger(List speeds) { - return NbtMap.builder() - .putList("destroy_speeds", NbtType.COMPOUND, speeds) - .putCompound("on_dig", NbtMap.builder() - .putCompound("condition", NbtMap.builder() - .putString("expression", "") - .putInt("version", -1) - .build()) - .putString("event", "tool_durability") - .putString("target", "self") - .build()) - .putBoolean("use_efficiency", true) - .build(); - } - - public static NbtMap getAxeDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createTagBreakSpeed(speed, "wood", "pumpkin", "plant")); - - return createDigger(speeds); - } - - public static NbtMap getPickaxeDigger(int speed, String toolTier) { - List speeds = new ArrayList<>(); - if (toolTier.equals(ToolTier.DIAMOND.toString()) || toolTier.equals(ToolTier.NETHERITE.toString())) { - speeds.add(createTagBreakSpeed(speed, "iron_pick_diggable", "diamond_pick_diggable")); - } else { - speeds.add(createTagBreakSpeed(speed, "iron_pick_diggable")); - } - speeds.add(createTagBreakSpeed(speed, "stone", "metal", "rail", "mob_spawner")); - - return createDigger(speeds); - } - - public static NbtMap getShovelDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createTagBreakSpeed(speed, "dirt", "sand", "gravel", "grass", "snow")); - - return createDigger(speeds); - } - - public static NbtMap getSwordDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createBreakSpeed(speed, "minecraft:web")); - speeds.add(createBreakSpeed(speed, "minecraft:bamboo")); - - return createDigger(speeds); - } - - public static NbtMap getHoeDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createBreakSpeed(speed, "minecraft:leaves")); - speeds.add(createBreakSpeed(speed, "minecraft:leaves2")); - speeds.add(createBreakSpeed(speed, "minecraft:azalea_leaves")); - speeds.add(createBreakSpeed(speed, "minecraft:azalea_leaves_flowered")); - - speeds.add(createBreakSpeed(speed, "minecraft:sculk")); - speeds.add(createBreakSpeed(speed, "minecraft:sculk_catalyst")); - speeds.add(createBreakSpeed(speed, "minecraft:sculk_sensor")); - speeds.add(createBreakSpeed(speed, "minecraft:sculk_shrieker")); - speeds.add(createBreakSpeed(speed, "minecraft:sculk_vein")); - - speeds.add(createBreakSpeed(speed, "minecraft:nether_wart_block")); - speeds.add(createBreakSpeed(speed, "minecraft:warped_wart_block")); - - speeds.add(createBreakSpeed(speed, "minecraft:hay_block")); - speeds.add(createBreakSpeed(speed, "minecraft:moss_block")); - speeds.add(createBreakSpeed(speed, "minecraft:shroomlight")); - speeds.add(createBreakSpeed(speed, "minecraft:sponge")); - speeds.add(createBreakSpeed(speed, "minecraft:target")); - - return createDigger(speeds); - } - - public static NbtMap getShearsDigger(int speed) { - List speeds = new ArrayList<>(); - speeds.add(createBreakSpeed(speed, "minecraft:web")); - - speeds.add(createBreakSpeed(speed, "minecraft:leaves")); - speeds.add(createBreakSpeed(speed, "minecraft:leaves2")); - speeds.add(createBreakSpeed(speed, "minecraft:azalea_leaves")); - speeds.add(createBreakSpeed(speed, "minecraft:azalea_leaves_flowered")); - - speeds.add(createBreakSpeed(speed, "minecraft:wool")); - - speeds.add(createBreakSpeed(speed, "minecraft:glow_lichen")); - speeds.add(createBreakSpeed(speed, "minecraft:vine")); - - return createDigger(speeds); - } -} diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index e43e168ee..e401567e2 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -31,18 +31,19 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import lombok.Value; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.block.custom.component.BoxComponent; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.GeometryComponent; import org.geysermc.geyser.api.block.custom.component.MaterialInstance; import org.geysermc.geyser.api.block.custom.component.PlacementConditions; import org.geysermc.geyser.api.block.custom.component.TransformationComponent; -import org.jetbrains.annotations.NotNull; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; +import java.util.Objects; @Value public class GeyserCustomBlockComponents implements CustomBlockComponents { @@ -152,7 +153,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { } @Override - public @NotNull Set tags() { + public @NonNull Set tags() { return tags; } @@ -170,7 +171,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { protected TransformationComponent transformation; protected boolean unitCube = false; protected boolean placeAir = false; - protected final Set tags = new HashSet<>(); + protected Set tags = new HashSet<>(); private void validateBox(BoxComponent box) { if (box == null) { @@ -217,7 +218,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { } @Override - public Builder materialInstance(@NotNull String name, @NotNull MaterialInstance materialInstance) { + public Builder materialInstance(@NonNull String name, @NonNull MaterialInstance materialInstance) { this.materialInstances.put(name, materialInstance); return this; } @@ -292,8 +293,8 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { } @Override - public Builder tags(Set tags) { - this.tags.addAll(tags); + public Builder tags(@Nullable Set tags) { + this.tags = Objects.requireNonNullElseGet(tags, Set::of); return this; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index e63bf6bf9..fb4a6acbe 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -198,6 +198,12 @@ public class MappingsReader_v1 extends MappingsReader { customItemData.renderOffsets(fromJsonNode(tmpNode)); } + if (node.get("tags") instanceof ArrayNode tags) { + Set tagsSet = new ObjectOpenHashSet<>(); + tags.forEach(tag -> tagsSet.add(tag.asText())); + customItemData.tags(tagsSet); + } + return customItemData.build(); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index 3f3f5a4ba..638e41a5e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -270,6 +270,17 @@ public class CustomItemRegistryPopulator { .build()); componentBuilder.putCompound("minecraft:display_name", NbtMap.builder().putString("value", customItemData.displayName()).build()); + // Add a Geyser tag to the item, allowing Molang queries + addItemTag(componentBuilder, "geyser:is_custom"); + + // Add other defined tags to the item + Set tags = customItemData.tags(); + for (String tag : tags) { + if (tag != null && !tag.isBlank()) { + addItemTag(componentBuilder, tag); + } + } + itemProperties.putBoolean("allow_off_hand", customItemData.allowOffhand()); itemProperties.putBoolean("hand_equipped", displayHandheld); itemProperties.putInt("max_stack_size", stackSize); @@ -313,7 +324,7 @@ public class CustomItemRegistryPopulator { .build() )); - componentBuilder.putCompound("minecraft:digger", + componentBuilder.putCompound("minecraft:digger", NbtMap.builder() .putList("destroy_speeds", NbtType.COMPOUND, speed) .putCompound("on_dig", NbtMap.builder() @@ -506,8 +517,19 @@ public class CustomItemRegistryPopulator { return List.of(xyz.x(), xyz.y(), xyz.z()); } - private static void setItemTag(NbtMapBuilder builder, String tag) { - builder.putList("item_tags", NbtType.STRING, List.of("minecraft:is_" + tag)); + @SuppressWarnings("unchecked") + private static void addItemTag(NbtMapBuilder builder, String tag) { + List tagList = (List) builder.get("item_tags"); + if (tagList == null) { + builder.putList("item_tags", NbtType.STRING, tag); + } else { + // NbtList is immutable + if (!tagList.contains(tag)) { + tagList = new ArrayList<>(tagList); + tagList.add(tag); + builder.putList("item_tags", NbtType.STRING, tagList); + } + } } private static NbtMap xyzToScaleList(float x, float y, float z) { From 9dad1acfe5a87130b39224f1706ab78176922057 Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 10 Nov 2023 20:45:15 +0100 Subject: [PATCH 17/86] Feature: Add recipe unlocking on Bedrock edition (#4016) * Start on 1.20.10+ recipe unlocking system * Keeping track of multiple Bedrock recipes to unlock for a single Java recipe * Unlock stonecutter recipes * Stonecutter recipes * Unlock tipped arrows/shulker box recipes even when Java doesnt (why..?), and dont send trims if Java doesn't * Translate FurnaceDataRecipes * Revert FurnaceRecipe translation, revert stone cutter recipe identifier caching - Bedrock does not need the smelting recipe, and doesn't (un)lock stonecutter recipes (yet...?) * Remove debug message * Make decorated pot crafting just a little bit smoother :p * formatting * Use itemTag descriptors to fix https://github.com/GeyserMC/Geyser/issues/3784 * Use hashmap instead to store item tag overrides * remove unnecessary comment * Address review by @Konicai * Support for 1.20.30 * undo add whitespace * Merge upstream, use FastUtil maps, rename a few methods * Address Camotoy's review * Fix formatting --- .../geysermc/geyser/network/GameProtocol.java | 8 ++ .../geyser/session/GeyserSession.java | 17 ++++ .../JavaClientboundRecipesTranslator.java | 79 +++++++++++++++++ .../java/JavaUpdateRecipesTranslator.java | 85 +++++++++++++++++-- 4 files changed, 181 insertions(+), 8 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index bf40ea2f9..5555375cd 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -93,6 +93,14 @@ public final class GameProtocol { return session.getUpstream().getProtocolVersion() < Bedrock_v594.CODEC.getProtocolVersion(); } + /** + * @param session the session to check + * @return true if the session needs an experiment for recipe unlocking + */ + public static boolean isUsingExperimentalRecipeUnlocking(GeyserSession session) { + return session.getUpstream().getProtocolVersion() == Bedrock_v594.CODEC.getProtocolVersion(); + } + /** * Gets the {@link PacketCodec} for Minecraft: Java Edition. * diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 35b532905..4d4b2a5ba 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -128,6 +128,7 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.level.physics.CollisionManager; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.network.netty.LocalSession; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.BlockMappings; @@ -391,6 +392,13 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private Entity mouseoverEntity; + /** + * Stores all Java recipes by recipe identifier, and matches them to all possible Bedrock recipe identifiers. + * They are not 1:1, since Bedrock can have multiple recipes for the same Java recipe. + */ + @Setter + private Map> javaToBedrockRecipeIds; + @Setter private Int2ObjectMap craftingRecipes; private final AtomicInteger lastRecipeNetId; @@ -611,6 +619,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.playerInventory = new PlayerInventory(); this.openInventory = null; this.craftingRecipes = new Int2ObjectOpenHashMap<>(); + this.javaToBedrockRecipeIds = new Object2ObjectOpenHashMap<>(); this.lastRecipeNetId = new AtomicInteger(1); this.spawned = false; @@ -690,6 +699,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { gamerulePacket.getGameRules().add(new GameRuleData<>("keepinventory", true)); // Ensure client doesn't try and do anything funky; the server handles this for us gamerulePacket.getGameRules().add(new GameRuleData<>("spawnradius", 0)); + // Recipe unlocking - only needs to be added if 1. it isn't already on via an experiment, or 2. the client is on pre 1.20.10 + if (!GameProtocol.isPre1_20_10(this) && !GameProtocol.isUsingExperimentalRecipeUnlocking(this)) { + gamerulePacket.getGameRules().add(new GameRuleData<>("recipesunlock", true)); + } upstream.sendPacket(gamerulePacket); } @@ -1527,6 +1540,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { startGamePacket.setRewindHistorySize(0); startGamePacket.setServerAuthoritativeBlockBreaking(false); + if (GameProtocol.isUsingExperimentalRecipeUnlocking(this)) { + startGamePacket.getExperiments().add(new ExperimentData("recipe_unlocking", true)); + } + upstream.sendPacket(startGamePacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java new file mode 100644 index 000000000..1ccbcfdec --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java @@ -0,0 +1,79 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.protocol.java; + +import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundRecipePacket; +import org.cloudburstmc.protocol.bedrock.packet.UnlockedRecipesPacket; +import org.geysermc.geyser.network.GameProtocol; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; + +import java.util.ArrayList; +import java.util.List; + +@Translator(packet = ClientboundRecipePacket.class) +public class JavaClientboundRecipesTranslator extends PacketTranslator { + + @Override + public void translate(GeyserSession session, ClientboundRecipePacket packet) { + // recipe unlocking does not exist pre 1.20.10 + if (GameProtocol.isPre1_20_10(session)) { + return; + } + + UnlockedRecipesPacket recipesPacket = new UnlockedRecipesPacket(); + switch (packet.getAction()) { + case INIT -> { + recipesPacket.setAction(UnlockedRecipesPacket.ActionType.INITIALLY_UNLOCKED); + recipesPacket.getUnlockedRecipes().addAll(getBedrockRecipes(session, packet.getAlreadyKnownRecipes())); + } + case ADD -> { + recipesPacket.setAction(UnlockedRecipesPacket.ActionType.NEWLY_UNLOCKED); + recipesPacket.getUnlockedRecipes().addAll(getBedrockRecipes(session, packet.getRecipes())); + } + case REMOVE -> { + recipesPacket.setAction(UnlockedRecipesPacket.ActionType.REMOVE_UNLOCKED); + recipesPacket.getUnlockedRecipes().addAll(getBedrockRecipes(session, packet.getRecipes())); + } + } + session.sendUpstreamPacket(recipesPacket); + } + + private List getBedrockRecipes(GeyserSession session, String[] javaRecipeIdentifiers) { + List recipes = new ArrayList<>(); + for (String javaIdentifier : javaRecipeIdentifiers) { + List bedrockRecipes = session.getJavaToBedrockRecipeIds().get(javaIdentifier); + // Some recipes are not (un)lockable on Bedrock edition, like furnace or stonecutter recipes. + // So we don't store/send these. + if (bedrockRecipes != null) { + recipes.addAll(bedrockRecipes); + } + } + return recipes; + } +} + diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java index 7a14cebcb..5beb1a201 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java @@ -44,6 +44,7 @@ import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.RecipeDa import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.SmithingTrimRecipeData; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.DefaultDescriptor; import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemDescriptorWithCount; +import org.cloudburstmc.protocol.bedrock.data.inventory.descriptor.ItemTagDescriptor; import org.cloudburstmc.protocol.bedrock.packet.CraftingDataPacket; import org.cloudburstmc.protocol.bedrock.packet.TrimDataPacket; import org.geysermc.geyser.GeyserImpl; @@ -67,7 +68,6 @@ import static org.geysermc.geyser.util.InventoryUtils.LAST_RECIPE_NET_ID; /** * Used to send all valid recipes from Java to Bedrock. - * * Bedrock REQUIRES a CraftingDataPacket to be sent in order to craft anything. */ @Translator(packet = ClientboundUpdateRecipesPacket.class) @@ -94,17 +94,27 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator RECIPE_TAGS = Map.of( + "minecraft:wood", "minecraft:logs", + "minecraft:wooden_slab", "minecraft:wooden_slabs", + "minecraft:planks", "minecraft:planks"); + @Override public void translate(GeyserSession session, ClientboundUpdateRecipesPacket packet) { Map> recipeTypes = Registries.CRAFTING_DATA.forVersion(session.getUpstream().getProtocolVersion()); // Get the last known network ID (first used for the pregenerated recipes) and increment from there. int netId = InventoryUtils.LAST_RECIPE_NET_ID + 1; boolean sendTrimRecipes = false; - + Map> recipeIDs = session.getJavaToBedrockRecipeIds(); Int2ObjectMap recipeMap = new Int2ObjectOpenHashMap<>(Registries.RECIPES.forVersion(session.getUpstream().getProtocolVersion())); Int2ObjectMap> unsortedStonecutterData = new Int2ObjectOpenHashMap<>(); CraftingDataPacket craftingDataPacket = new CraftingDataPacket(); craftingDataPacket.setCleanRecipes(true); + for (Recipe recipe : packet.getRecipes()) { switch (recipe.getType()) { case CRAFTING_SHAPELESS -> { @@ -121,12 +131,15 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator bedrockRecipeIDs = new ArrayList<>(); for (ItemDescriptorWithCount[] inputs : inputCombinations) { UUID uuid = UUID.randomUUID(); + bedrockRecipeIDs.add(uuid.toString()); craftingDataPacket.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData.shapeless(uuid.toString(), Arrays.asList(inputs), Collections.singletonList(output), uuid, "crafting_table", 0, netId)); recipeMap.put(netId++, new GeyserShapelessRecipe(shapelessRecipeData)); } + addRecipeIdentifier(session, recipe.getIdentifier(), bedrockRecipeIDs); } case CRAFTING_SHAPED -> { ShapedRecipeData shapedRecipeData = (ShapedRecipeData) recipe.getData(); @@ -141,13 +154,17 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator bedrockRecipeIDs = new ArrayList<>(); for (ItemDescriptorWithCount[] inputs : inputCombinations) { UUID uuid = UUID.randomUUID(); + bedrockRecipeIDs.add(uuid.toString()); craftingDataPacket.getCraftingData().add(org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData.shaped(uuid.toString(), shapedRecipeData.getWidth(), shapedRecipeData.getHeight(), Arrays.asList(inputs), Collections.singletonList(output), uuid, "crafting_table", 0, netId)); recipeMap.put(netId++, new GeyserShapedRecipe(shapedRecipeData)); } + addRecipeIdentifier(session, recipe.getIdentifier(), bedrockRecipeIDs); } case STONECUTTING -> { StoneCuttingRecipeData stoneCuttingData = (StoneCuttingRecipeData) recipe.getData(); @@ -157,8 +174,8 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator(); unsortedStonecutterData.put(ingredient.getId(), data); } - data.add(stoneCuttingData); // Save for processing after all recipes have been received + data.add(stoneCuttingData); } case SMITHING_TRANSFORM -> { SmithingTransformRecipeData data = (SmithingTransformRecipeData) recipe.getData(); @@ -173,21 +190,29 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator(Collections.singletonList(id))); } } } - } case SMITHING_TRIM -> { sendTrimRecipes = true; // ignored currently - see below } + case CRAFTING_DECORATED_POT -> { + // Paper 1.20 seems to send only one recipe, which seems to be hardcoded to include all recipes. + // We can send the equivalent Bedrock MultiRecipe! :) + craftingDataPacket.getCraftingData().add(MultiRecipeData.of(UUID.fromString("685a742a-c42e-4a4e-88ea-5eb83fc98e5b"), netId++)); + } default -> { List craftingData = recipeTypes.get(recipe.getType()); if (craftingData != null) { + addSpecialRecipesIdentifiers(session, recipe, craftingData); craftingDataPacket.getCraftingData().addAll(craftingData); } } @@ -218,14 +243,15 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator craftingData) { + String javaRecipeID = recipe.getIdentifier(); + + switch (recipe.getType()) { + case CRAFTING_SPECIAL_BOOKCLONING, CRAFTING_SPECIAL_REPAIRITEM, CRAFTING_SPECIAL_MAPEXTENDING, CRAFTING_SPECIAL_MAPCLONING: + // We do not want to (un)lock these, since BDS does not do it for MultiRecipes + return; + case CRAFTING_SPECIAL_SHULKERBOXCOLORING: + // BDS (un)locks the dyeing with the shulker box recipe, Java never - we want BDS behavior for ease of use + javaRecipeID = "minecraft:shulker_box"; + break; + case CRAFTING_SPECIAL_TIPPEDARROW: + // similar as above + javaRecipeID = "minecraft:arrow"; + break; + } + List bedrockRecipeIDs = new ArrayList<>(); + + // defined in the recipes.json mappings file: Only tipped arrows use shaped recipes, we need the cast for the identifier + if (recipe.getType() == RecipeType.CRAFTING_SPECIAL_TIPPEDARROW) { + for (RecipeData data : craftingData) { + bedrockRecipeIDs.add(((org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapedRecipeData) data).getId()); + } + } else { + for (RecipeData data : craftingData) { + bedrockRecipeIDs.add(((org.cloudburstmc.protocol.bedrock.data.inventory.crafting.recipe.ShapelessRecipeData) data).getId()); + } + } + addRecipeIdentifier(session, javaRecipeID, bedrockRecipeIDs); } //TODO: rewrite @@ -277,6 +335,13 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator> entry : groupedByIds.entrySet()) { if (entry.getValue().size() > 1) { GroupedItem groupedItem = entry.getKey(); + + String recipeTag = RECIPE_TAGS.get(groupedItem.id.getIdentifier()); + if (recipeTag != null) { + optionSet.add(new ItemDescriptorWithCount(new ItemTagDescriptor(recipeTag), groupedItem.count)); + continue; + } + int idCount = 0; //not optimal for (ItemMapping mapping : session.getItemMappings().getItems()) { @@ -337,6 +402,10 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator bedrockIdentifiers) { + session.getJavaToBedrockRecipeIds().computeIfAbsent(javaIdentifier, k -> new ArrayList<>()).addAll(bedrockIdentifiers); + } + @EqualsAndHashCode @AllArgsConstructor private static class GroupedItem { From 0ebb7232f97721392ed3115ab752650cf42aa2d5 Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 10 Nov 2023 23:44:38 +0100 Subject: [PATCH 18/86] Add SessionDisconnectEvent (#4052) * Add SessionDisconnectEvent * Move disconnect event calling to UpstreamSession, debug double calling issues * Prevent duplicate disconnect calling * Tidy up disconnection logic, ensure SessionDisconnectEvent is always fired - but only once. Fix /geyser reload command --- .../event/bedrock/SessionDisconnectEvent.java | 61 +++++++++++++++++++ .../command/defaults/ReloadCommand.java | 5 +- .../geyser/session/GeyserSession.java | 28 +++++++-- .../geyser/session/UpstreamSession.java | 2 +- 4 files changed, 89 insertions(+), 7 deletions(-) create mode 100644 api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionDisconnectEvent.java diff --git a/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionDisconnectEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionDisconnectEvent.java new file mode 100644 index 000000000..05e3415a0 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/event/bedrock/SessionDisconnectEvent.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.bedrock; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.geyser.api.connection.GeyserConnection; +import org.geysermc.geyser.api.event.connection.ConnectionEvent; + +/** + * Called when a Geyser session disconnects. + */ +public class SessionDisconnectEvent extends ConnectionEvent { + private String disconnectReason; + + public SessionDisconnectEvent(@NonNull GeyserConnection connection, @NonNull String reason) { + super(connection); + this.disconnectReason = reason; + } + + /** + * Gets the disconnect reason. + * + * @return the reason for the disconnect + */ + public @NonNull String disconnectReason() { + return disconnectReason; + } + + /** + * Sets the disconnect reason, thereby overriding th original reason. + * + * @param disconnectReason the reason for the disconnect + */ + public void disconnectReason(@NonNull String disconnectReason) { + this.disconnectReason = disconnectReason; + } +} + diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java index 8f147cdab..a3cd8fa4c 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java @@ -32,6 +32,8 @@ import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; +import java.util.concurrent.TimeUnit; + public class ReloadCommand extends GeyserCommand { private final GeyserImpl geyser; @@ -52,7 +54,8 @@ public class ReloadCommand extends GeyserCommand { sender.sendMessage(message); geyser.getSessionManager().disconnectAll("geyser.commands.reload.kick"); - geyser.reload(); + //FIXME Without the tiny wait, players do not get kicked - same happens when Geyser tries to disconnect all sessions on shutdown + geyser.getScheduledThread().schedule(geyser::reload, 10, TimeUnit.MILLISECONDS); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 4d4b2a5ba..ebb0025da 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -105,6 +105,7 @@ import org.geysermc.geyser.api.bedrock.camera.CameraShake; import org.geysermc.geyser.api.connection.GeyserConnection; import org.geysermc.geyser.api.entity.type.GeyserEntity; import org.geysermc.geyser.api.entity.type.player.GeyserPlayerEntity; +import org.geysermc.geyser.api.event.bedrock.SessionDisconnectEvent; import org.geysermc.geyser.api.event.bedrock.SessionLoginEvent; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.api.network.RemoteServer; @@ -1038,10 +1039,14 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect", authData.name(), remoteServer.address(), disconnectMessage)); } if (cause != null) { - cause.printStackTrace(); + GeyserImpl.getInstance().getLogger().error(cause.getMessage()); + // GeyserSession is disconnected via session.disconnect() called indirectly be the server + // This only needs to be "initiated" here when there is an exception, hence the cause clause + GeyserSession.this.disconnect(disconnectMessage); + if (geyser.getConfig().isDebugMode()) { + cause.printStackTrace(); + } } - - upstream.disconnect(disconnectMessage); } @Override @@ -1068,17 +1073,30 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { public void disconnect(String reason) { if (!closed) { loggedIn = false; + + // Fire SessionDisconnectEvent + SessionDisconnectEvent disconnectEvent = new SessionDisconnectEvent(this, reason); + geyser.getEventBus().fire(disconnectEvent); + + // Disconnect downstream if necessary if (downstream != null) { - downstream.disconnect(reason); + // No need to disconnect if already closed + if (!downstream.isClosed()) { + downstream.disconnect(reason); + } } else { // Downstream's disconnect will fire an event that prints a log message // Otherwise, we print a message here String address = geyser.getConfig().isLogPlayerIpAddresses() ? upstream.getAddress().getAddress().toString() : ""; geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.disconnect", address, reason)); } + + // Disconnect upstream if necessary if (!upstream.isClosed()) { - upstream.disconnect(reason); + upstream.disconnect(disconnectEvent.disconnectReason()); } + + // Remove from session manager geyser.getSessionManager().removeSession(this); if (authData != null) { PendingMicrosoftAuthentication.AuthenticationTask task = geyser.getPendingMicrosoftAuthentication().getTask(authData.xuid()); diff --git a/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java b/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java index ef462a3e3..35ede56a1 100644 --- a/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/UpstreamSession.java @@ -58,7 +58,7 @@ public class UpstreamSession { } public void disconnect(String reason) { - session.disconnect(reason); + this.session.disconnect(reason); } /** From 81178ba2a070aa41a133c3817759c7b43e262d12 Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 11 Nov 2023 02:25:02 +0100 Subject: [PATCH 19/86] Reset weather on dimension switch (#4283) --- .../protocol/java/JavaLoginTranslator.java | 22 +++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java index e7539bd0f..377f1d2cf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java @@ -28,8 +28,11 @@ package org.geysermc.geyser.translator.protocol.java; import com.github.steveice10.mc.protocol.data.game.entity.player.PlayerSpawnInfo; import com.github.steveice10.mc.protocol.packet.common.serverbound.ServerboundCustomPayloadPacket; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.ClientboundLoginPacket; +import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.GameRuleData; +import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.packet.GameRulesChangedPacket; +import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.cloudburstmc.protocol.bedrock.packet.SetPlayerGameTypePacket; import org.geysermc.floodgate.pluginmessage.PluginMessageChannels; import org.geysermc.geyser.api.network.AuthType; @@ -70,6 +73,25 @@ public class JavaLoginTranslator extends PacketTranslator Date: Sat, 11 Nov 2023 13:26:28 -0500 Subject: [PATCH 20/86] Address #4281 --- .../bungeecord/GeyserBungeeCompressionDisabler.java | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeCompressionDisabler.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeCompressionDisabler.java index 084e1d2dc..485079a05 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeCompressionDisabler.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeCompressionDisabler.java @@ -32,18 +32,26 @@ import net.md_5.bungee.protocol.packet.LoginSuccess; import net.md_5.bungee.protocol.packet.SetCompression; public class GeyserBungeeCompressionDisabler extends ChannelOutboundHandlerAdapter { + private boolean compressionDisabled = false; @Override public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { if (!(msg instanceof SetCompression)) { - if (msg instanceof LoginSuccess) { - // We're past the point that compression can be enabled + // Fixes https://github.com/GeyserMC/Geyser/issues/4281 + // The server may send a LoginDisconnect packet after compression is set. + if (!compressionDisabled) { if (ctx.pipeline().get("compress") != null) { ctx.pipeline().remove("compress"); + compressionDisabled = true; } if (ctx.pipeline().get("decompress") != null) { ctx.pipeline().remove("decompress"); + compressionDisabled = true; } + } + + if (msg instanceof LoginSuccess) { + // We're past the point that compression can be enabled ctx.pipeline().remove(this); } super.write(ctx, msg, promise); From 13339f1ed1273050fafd553ea6210c635d24e4a7 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Sat, 11 Nov 2023 17:14:15 -0500 Subject: [PATCH 21/86] Dragon and piglin heads now animate on 1.20.2 servers --- .../geyser/level/block/BlockStateValues.java | 19 +++++++++++++++++++ .../entity/SkullBlockEntityTranslator.java | 3 +++ 2 files changed, 22 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java b/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java index 97ab18c6b..11702e78a 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java @@ -62,6 +62,7 @@ public final class BlockStateValues { private static final IntSet ALL_PISTON_HEADS = new IntOpenHashSet(); private static final IntSet MOVING_PISTONS = new IntOpenHashSet(); private static final Int2ByteMap SKULL_VARIANTS = new FixedInt2ByteMap(); + private static final IntSet SKULL_POWERED = new IntOpenHashSet(); private static final Int2ByteMap SKULL_ROTATIONS = new Int2ByteOpenHashMap(); private static final Int2IntMap SKULL_WALL_DIRECTIONS = new Int2IntOpenHashMap(); private static final Int2ByteMap SHULKERBOX_DIRECTIONS = new FixedInt2ByteMap(); @@ -172,6 +173,13 @@ public final class BlockStateValues { SKULL_ROTATIONS.put(javaBlockState, (byte) skullRotation.intValue()); } + if (javaId.startsWith("minecraft:dragon_head[") || javaId.startsWith("minecraft:piglin_head[") + || javaId.startsWith("minecraft:dragon_wall_head[") || javaId.startsWith("minecraft:piglin_wall_head[")) { + if (javaId.contains("powered=true")) { + SKULL_POWERED.add(javaBlockState); + } + } + if (javaId.contains("wall_skull") || javaId.contains("wall_head")) { String direction = javaId.substring(javaId.lastIndexOf("facing=") + 7, javaId.lastIndexOf("powered=") - 1); int rotation = switch (direction) { @@ -448,6 +456,17 @@ public final class BlockStateValues { return SKULL_ROTATIONS.getOrDefault(state, (byte) -1); } + /** + * As of Java 1.20.2: + * Skull powered states are part of the namespaced ID in Java Edition, but part of the block entity tag in Bedrock. + * + * @param state BlockState of the block + * @return true if this skull is currently being powered. + */ + public static boolean isSkullPowered(int state) { + return SKULL_POWERED.contains(state); + } + /** * Skull rotations are part of the namespaced ID in Java Edition, but part of the block entity tag in Bedrock. * This gives a integer rotation that Bedrock can use. diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index 76cdbb5a4..7f87f9465 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -60,6 +60,9 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements } builder.put("Rotation", rotation); builder.put("SkullType", skullVariant); + if (BlockStateValues.isSkullPowered(blockState)) { + builder.putBoolean("MouthMoving", true); + } } private static UUID getUUID(CompoundTag owner) { From bb6a1ec40ab42c8b57ee4a427683410302b43774 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Mon, 13 Nov 2023 18:17:40 -0500 Subject: [PATCH 22/86] Simply pingpassthrough logic, add fabric ping passthrough (#3930) * Check if PingPassthrough is null * Remove QueryPacketHandler * Fabric ping passthrough --- .../GeyserBungeePingPassthrough.java | 12 +- .../platform/fabric/GeyserFabricMod.java | 6 +- .../platform/fabric/ModPingPassthrough.java | 110 +++++++ .../spigot/GeyserPaperPingPassthrough.java | 12 +- .../spigot/GeyserSpigotPingPassthrough.java | 8 +- .../GeyserVelocityPingPassthrough.java | 14 +- .../org/geysermc/geyser/GeyserBootstrap.java | 9 +- .../configuration/GeyserConfiguration.java | 3 - .../GeyserJacksonConfiguration.java | 3 - .../geyser/network/QueryPacketHandler.java | 303 ------------------ .../geyser/network/netty/GeyserServer.java | 21 +- .../geysermc/geyser/ping/GeyserPingInfo.java | 39 +-- .../geyser/ping/IGeyserPingPassthrough.java | 11 - core/src/main/resources/config.yml | 3 - 14 files changed, 160 insertions(+), 394 deletions(-) create mode 100644 bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/ModPingPassthrough.java delete mode 100644 core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java index 39fb9e134..e14e8ff66 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java @@ -40,7 +40,6 @@ import org.geysermc.geyser.ping.IGeyserPingPassthrough; import java.net.InetSocketAddress; import java.net.SocketAddress; -import java.util.Arrays; import java.util.UUID; import java.util.concurrent.CompletableFuture; @@ -61,16 +60,11 @@ public class GeyserBungeePingPassthrough implements IGeyserPingPassthrough, List })); ProxyPingEvent event = future.join(); ServerPing response = event.getResponse(); - GeyserPingInfo geyserPingInfo = new GeyserPingInfo( + return new GeyserPingInfo( response.getDescriptionComponent().toLegacyText(), - new GeyserPingInfo.Players(response.getPlayers().getMax(), response.getPlayers().getOnline()), - new GeyserPingInfo.Version(response.getVersion().getName(), response.getVersion().getProtocol()) + response.getPlayers().getMax(), + response.getPlayers().getOnline() ); - if (event.getResponse().getPlayers().getSample() != null) { - Arrays.stream(event.getResponse().getPlayers().getSample()).forEach(proxiedPlayer -> - geyserPingInfo.getPlayerList().add(proxiedPlayer.getName())); - } - return geyserPingInfo; } // This is static so pending connection can use it diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java index 0bbe73f16..af0c9efca 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java @@ -144,7 +144,11 @@ public class GeyserFabricMod implements ModInitializer, GeyserBootstrap { GeyserImpl.start(); - this.geyserPingPassthrough = GeyserLegacyPingPassthrough.init(geyser); + if (geyserConfig.isLegacyPingPassthrough()) { + this.geyserPingPassthrough = GeyserLegacyPingPassthrough.init(geyser); + } else { + this.geyserPingPassthrough = new ModPingPassthrough(server, geyserLogger); + } this.geyserCommandManager = new GeyserCommandManager(geyser); this.geyserCommandManager.init(); diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/ModPingPassthrough.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/ModPingPassthrough.java new file mode 100644 index 000000000..e74be7fb7 --- /dev/null +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/ModPingPassthrough.java @@ -0,0 +1,110 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.platform.fabric; + +import lombok.AllArgsConstructor; +import net.kyori.adventure.text.Component; +import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; +import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import net.minecraft.network.Connection; +import net.minecraft.network.PacketSendListener; +import net.minecraft.network.protocol.Packet; +import net.minecraft.network.protocol.PacketFlow; +import net.minecraft.network.protocol.status.ClientboundStatusResponsePacket; +import net.minecraft.network.protocol.status.ServerStatus; +import net.minecraft.network.protocol.status.ServerStatusPacketListener; +import net.minecraft.network.protocol.status.ServerboundStatusRequestPacket; +import net.minecraft.server.MinecraftServer; +import net.minecraft.server.network.ServerStatusPacketListenerImpl; +import org.geysermc.geyser.GeyserLogger; +import org.geysermc.geyser.ping.GeyserPingInfo; +import org.geysermc.geyser.ping.IGeyserPingPassthrough; +import org.jetbrains.annotations.Nullable; + +import java.net.InetSocketAddress; +import java.util.Objects; + +@AllArgsConstructor +public class ModPingPassthrough implements IGeyserPingPassthrough { + + private static final GsonComponentSerializer GSON_SERIALIZER = GsonComponentSerializer.gson(); + private static final LegacyComponentSerializer LEGACY_SERIALIZER = LegacyComponentSerializer.legacySection(); + + private final MinecraftServer server; + private final GeyserLogger logger; + + @Nullable + @Override + public GeyserPingInfo getPingInformation(InetSocketAddress inetSocketAddress) { + ServerStatus status = server.getStatus(); + if (status == null) { + return null; + } + + try { + StatusInterceptor connection = new StatusInterceptor(); + ServerStatusPacketListener statusPacketListener = new ServerStatusPacketListenerImpl(status, connection); + + statusPacketListener.handleStatusRequest(new ServerboundStatusRequestPacket()); + // mods like MiniMOTD (that inject into the above method) have now processed the response + status = Objects.requireNonNull(connection.status, "status response"); + } catch (Exception e) { + if (logger.isDebug()) { + logger.debug("Failed to listen for modified ServerStatus: " + e.getMessage()); + e.printStackTrace(); + } + } + + String jsonDescription = net.minecraft.network.chat.Component.Serializer.toJson(status.description()); + String legacyDescription = LEGACY_SERIALIZER.serialize(GSON_SERIALIZER.deserializeOr(jsonDescription, Component.empty())); + + return new GeyserPingInfo( + legacyDescription, + status.players().map(ServerStatus.Players::max).orElse(1), + status.players().map(ServerStatus.Players::online).orElse(0) + ); + } + + /** + * Custom Connection that intercepts the status response right before it is sent + */ + private static class StatusInterceptor extends Connection { + + ServerStatus status; + + StatusInterceptor() { + super(PacketFlow.SERVERBOUND); // we are the server. + } + + @Override + public void send(Packet packet, @Nullable PacketSendListener packetSendListener, boolean bl) { + if (packet instanceof ClientboundStatusResponsePacket statusResponse) { + status = statusResponse.status(); + } + super.send(packet, packetSendListener, bl); + } + } +} diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java index bb0f30e70..60e0ae519 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.platform.spigot; import com.destroystokyo.paper.event.server.PaperServerListPingEvent; import com.destroystokyo.paper.network.StatusClient; -import com.destroystokyo.paper.profile.PlayerProfile; import org.bukkit.Bukkit; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.ping.GeyserPingInfo; @@ -81,16 +80,7 @@ public final class GeyserPaperPingPassthrough implements IGeyserPingPassthrough players = new GeyserPingInfo.Players(event.getMaxPlayers(), event.getNumPlayers()); } - GeyserPingInfo geyserPingInfo = new GeyserPingInfo(event.getMotd(), players, - new GeyserPingInfo.Version(Bukkit.getVersion(), GameProtocol.getJavaProtocolVersion())); - - if (!event.shouldHidePlayers()) { - for (PlayerProfile profile : event.getPlayerSample()) { - geyserPingInfo.getPlayerList().add(profile.getName()); - } - } - - return geyserPingInfo; + return new GeyserPingInfo(event.getMotd(), players); } catch (Exception | LinkageError e) { // LinkageError in the event that method/constructor signatures change logger.debug("Error while getting Paper ping passthrough: " + e); return null; diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java index 1e6a0ad6c..df197f137 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java @@ -30,7 +30,6 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.server.ServerListPingEvent; import org.bukkit.util.CachedServerIcon; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.ping.GeyserPingInfo; import org.geysermc.geyser.ping.IGeyserPingPassthrough; @@ -50,12 +49,7 @@ public class GeyserSpigotPingPassthrough implements IGeyserPingPassthrough { try { ServerListPingEvent event = new GeyserPingEvent(inetSocketAddress.getAddress(), Bukkit.getMotd(), Bukkit.getOnlinePlayers().size(), Bukkit.getMaxPlayers()); Bukkit.getPluginManager().callEvent(event); - GeyserPingInfo geyserPingInfo = new GeyserPingInfo(event.getMotd(), - new GeyserPingInfo.Players(event.getMaxPlayers(), event.getNumPlayers()), - new GeyserPingInfo.Version(Bukkit.getVersion(), GameProtocol.getJavaProtocolVersion()) // thanks Spigot for not exposing this, just default to latest - ); - Bukkit.getOnlinePlayers().stream().map(Player::getName).forEach(geyserPingInfo.getPlayerList()::add); - return geyserPingInfo; + return new GeyserPingInfo(event.getMotd(), event.getMaxPlayers(), event.getNumPlayers()); } catch (Exception | LinkageError e) { // LinkageError in the event that method/constructor signatures change logger.debug("Error while getting Bukkit ping passthrough: " + e); return null; diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java index 1a9b9bf26..8944ea134 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPingPassthrough.java @@ -54,19 +54,11 @@ public class GeyserVelocityPingPassthrough implements IGeyserPingPassthrough { } catch (ExecutionException | InterruptedException e) { throw new RuntimeException(e); } - GeyserPingInfo geyserPingInfo = new GeyserPingInfo( + return new GeyserPingInfo( LegacyComponentSerializer.legacy('§').serialize(event.getPing().getDescriptionComponent()), - new GeyserPingInfo.Players( - event.getPing().getPlayers().orElseThrow(IllegalStateException::new).getMax(), - event.getPing().getPlayers().orElseThrow(IllegalStateException::new).getOnline() - ), - new GeyserPingInfo.Version( - event.getPing().getVersion().getName(), - event.getPing().getVersion().getProtocol() - ) + event.getPing().getPlayers().map(ServerPing.Players::getMax).orElse(1), + event.getPing().getPlayers().map(ServerPing.Players::getOnline).orElse(0) ); - event.getPing().getPlayers().get().getSample().stream().map(ServerPing.SamplePlayer::getName).forEach(geyserPingInfo.getPlayerList()::add); - return geyserPingInfo; } private static class GeyserInboundConnection implements InboundConnection { diff --git a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java index e4baeebb5..1827cfb36 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java @@ -25,6 +25,8 @@ package org.geysermc.geyser; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.command.GeyserCommandManager; import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.dump.BootstrapDumpInfo; @@ -32,8 +34,6 @@ import org.geysermc.geyser.level.GeyserWorldManager; import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.ping.IGeyserPingPassthrough; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.io.InputStream; import java.net.SocketAddress; import java.nio.file.Path; @@ -79,6 +79,7 @@ public interface GeyserBootstrap { * * @return The current PingPassthrough manager */ + @Nullable IGeyserPingPassthrough getGeyserPingPassthrough(); /** @@ -151,7 +152,7 @@ public interface GeyserBootstrap { * @param resource Resource to get * @return InputStream of the given resource */ - default @Nonnull InputStream getResource(String resource) { + default @NonNull InputStream getResource(String resource) { InputStream stream = getResourceOrNull(resource); if (stream == null) { throw new AssertionError("Unable to find resource: " + resource); @@ -162,7 +163,7 @@ public interface GeyserBootstrap { /** * @return the bind address being used by the Java server. */ - @Nonnull + @NonNull String getServerBindAddress(); /** diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java index e36ec819b..51cd7d4ae 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java @@ -57,9 +57,6 @@ public interface GeyserConfiguration { @JsonIgnore boolean isPassthroughMotd(); - @JsonIgnore - boolean isPassthroughProtocolName(); - @JsonIgnore boolean isPassthroughPlayerCounts(); diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java index 268304844..95ac7b1de 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java @@ -75,9 +75,6 @@ public abstract class GeyserJacksonConfiguration implements GeyserConfiguration @JsonProperty("passthrough-player-counts") private boolean isPassthroughPlayerCounts = false; - @JsonProperty("passthrough-protocol-name") - private boolean isPassthroughProtocolName = false; - @JsonProperty("legacy-ping-passthrough") private boolean isLegacyPingPassthrough = false; diff --git a/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java deleted file mode 100644 index 74e1430a2..000000000 --- a/core/src/main/java/org/geysermc/geyser/network/QueryPacketHandler.java +++ /dev/null @@ -1,303 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.network; - -import io.netty.buffer.ByteBuf; -import io.netty.buffer.ByteBufAllocator; -import org.geysermc.geyser.GeyserImpl; -import org.geysermc.geyser.ping.GeyserPingInfo; -import org.geysermc.geyser.translator.text.MessageTranslator; - -import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.net.InetAddress; -import java.net.InetSocketAddress; -import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.concurrent.ThreadLocalRandom; - -public class QueryPacketHandler { - public static final byte HANDSHAKE = 0x09; - public static final byte STATISTICS = 0x00; - - private final GeyserImpl geyser; - private final InetSocketAddress sender; - private final byte type; - private final int sessionId; - private byte[] token; - - /** - * The Query packet handler instance. The unsigned short magic handshake should already be read at this point, - * and the packet should be verified to have enough buffer space to be a qualified query packet. - * - * @param geyser Geyser - * @param sender The Sender IP/Port for the Query - * @param buffer The Query data - */ - public QueryPacketHandler(GeyserImpl geyser, InetSocketAddress sender, ByteBuf buffer) { - this.geyser = geyser; - this.sender = sender; - this.type = buffer.readByte(); - this.sessionId = buffer.readInt(); - - regenerateToken(); - handle(); - } - - /** - * Checks the packet is in fact a query packet - * - * @param buffer Query data - * @return if the packet is a query packet - */ - public static boolean isQueryPacket(ByteBuf buffer) { - // 2 for magic short, 1 for type byte and 4 for session ID int - return buffer.readableBytes() >= (2 + 1 + 4) && buffer.readUnsignedShort() == 0xFEFD; - } - - /** - * Handles the query - */ - private void handle() { - switch (type) { - case HANDSHAKE: - sendToken(); - break; - case STATISTICS: - sendQueryData(); - break; - } - } - - /** - * Sends the token to the sender - */ - private void sendToken() { - ByteBuf reply = ByteBufAllocator.DEFAULT.ioBuffer(10); - reply.writeByte(HANDSHAKE); - reply.writeInt(sessionId); - reply.writeBytes(getTokenString(this.token, this.sender.getAddress())); - reply.writeByte(0); - - sendPacket(reply); - } - - /** - * Sends the query data to the sender - */ - private void sendQueryData() { - byte[] gameData = getGameData(); - byte[] playerData = getPlayers(); - - ByteBuf reply = ByteBufAllocator.DEFAULT.ioBuffer(1 + 4 + gameData.length + playerData.length); - reply.writeByte(STATISTICS); - reply.writeInt(sessionId); - - // Game Info - reply.writeBytes(gameData); - - // Players - reply.writeBytes(playerData); - - sendPacket(reply); - } - - /** - * Gets the game data for the query - * - * @return the game data for the query - */ - private byte[] getGameData() { - ByteArrayOutputStream query = new ByteArrayOutputStream(); - - GeyserPingInfo pingInfo = null; - String motd; - String currentPlayerCount; - String maxPlayerCount; - String map; - - if (geyser.getConfig().isPassthroughMotd() || geyser.getConfig().isPassthroughPlayerCounts()) { - pingInfo = geyser.getBootstrap().getGeyserPingPassthrough().getPingInformation(); - } - - if (geyser.getConfig().isPassthroughMotd() && pingInfo != null) { - String[] javaMotd = MessageTranslator.convertMessageLenient(pingInfo.getDescription()).split("\n"); - motd = javaMotd[0].trim(); // First line of the motd. - } else { - motd = geyser.getConfig().getBedrock().primaryMotd(); - } - - // If passthrough player counts is enabled lets get players from the server - if (geyser.getConfig().isPassthroughPlayerCounts() && pingInfo != null) { - currentPlayerCount = String.valueOf(pingInfo.getPlayers().getOnline()); - maxPlayerCount = String.valueOf(pingInfo.getPlayers().getMax()); - } else { - currentPlayerCount = String.valueOf(geyser.getSessionManager().getSessions().size()); - maxPlayerCount = String.valueOf(geyser.getConfig().getMaxPlayers()); - } - - // If passthrough protocol name is enabled let's get the protocol name from the ping response. - if (geyser.getConfig().isPassthroughProtocolName() && pingInfo != null) { - map = pingInfo.getVersion().getName(); - } else { - map = GeyserImpl.NAME; - } - - // Create a hashmap of all game data needed in the query - Map gameData = new HashMap<>(); - gameData.put("hostname", motd); - gameData.put("gametype", "SMP"); - gameData.put("game_id", "MINECRAFT"); - gameData.put("version", GeyserImpl.NAME + " (" + GeyserImpl.GIT_VERSION + ") " + GameProtocol.DEFAULT_BEDROCK_CODEC.getMinecraftVersion()); - gameData.put("plugins", ""); - gameData.put("map", map); - gameData.put("numplayers", currentPlayerCount); - gameData.put("maxplayers", maxPlayerCount); - gameData.put("hostport", String.valueOf(geyser.getConfig().getBedrock().port())); - gameData.put("hostip", geyser.getConfig().getBedrock().address()); - - try { - writeString(query, "GeyserMC"); - query.write((byte) 0x80); - query.write((byte) 0x00); - - // Fills the game data - for (Map.Entry entry : gameData.entrySet()) { - writeString(query, entry.getKey()); - writeString(query, entry.getValue()); - } - - // Final byte to show the end of the game data - query.write(new byte[] { 0x00, 0x01 }); - return query.toByteArray(); - } catch (IOException e) { - e.printStackTrace(); - return new byte[0]; - } - } - - /** - * Generate a byte[] storing the player names - * - * @return The byte[] representation of players - */ - private byte[] getPlayers() { - ByteArrayOutputStream query = new ByteArrayOutputStream(); - - GeyserPingInfo pingInfo = null; - if (geyser.getConfig().isPassthroughMotd() || geyser.getConfig().isPassthroughPlayerCounts()) { - pingInfo = geyser.getBootstrap().getGeyserPingPassthrough().getPingInformation(); - } - - try { - // Start the player section - writeString(query, "player_"); - query.write((byte) 0x00); - - // Fill player names - if (pingInfo != null) { - for (String username : pingInfo.getPlayerList()) { - writeString(query, username); - } - } - - // Final byte to show the end of the player data - query.write((byte) 0x00); - return query.toByteArray(); - } catch (IOException e) { - e.printStackTrace(); - return new byte[0]; - } - } - - /** - * Partially mimics {@link java.io.DataOutputStream#writeBytes(String)} which is what the Minecraft server uses as of 1.17.1. - */ - private void writeString(OutputStream stream, String value) throws IOException { - int length = value.length(); - for (int i = 0; i < length; i++) { - stream.write((byte) value.charAt(i)); - } - // Padding to indicate the end of the string - stream.write((byte) 0x00); - } - - /** - * Sends a packet to the sender - * - * @param data packet data - */ - private void sendPacket(ByteBuf data) { - // geyser.getBedrockServer().getRakNet().send(sender, data); - } - - /** - * Regenerates a token - */ - public void regenerateToken() { - byte[] token = new byte[16]; - for (int i = 0; i < 16; i++) { - token[i] = (byte) ThreadLocalRandom.current().nextInt(255); - } - - this.token = token; - } - - /** - * Gets an MD5 token for the current IP/Port. - * This should reset every 30 seconds but a new one is generated per instance - * Seems wasteful to code something in to clear it when it has no use. - * - * @param token the token - * @param address the address - * @return an MD5 token for the current IP/Port - */ - public static byte[] getTokenString(byte[] token, InetAddress address) { - try { - // Generate an MD5 hash from the address - MessageDigest digest = MessageDigest.getInstance("MD5"); - digest.update(address.toString().getBytes(StandardCharsets.UTF_8)); - digest.update(token); - - // Get the first 4 bytes of the digest - byte[] digestBytes = Arrays.copyOf(digest.digest(), 4); - - // Convert the bytes to a buffer - ByteBuffer byteBuffer = ByteBuffer.wrap(digestBytes); - - // Turn the number into a null terminated string - return (byteBuffer.getInt() + "\0").getBytes(); - } catch (NoSuchAlgorithmException e) { - return (ByteBuffer.allocate(4).putInt(ThreadLocalRandom.current().nextInt()).getInt() + "\0").getBytes(); - } - } -} diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java index c89da0bdd..a811d8437 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java @@ -69,6 +69,7 @@ import java.util.List; import java.util.concurrent.CompletableFuture; import java.util.concurrent.TimeUnit; import java.util.function.IntFunction; +import java.util.function.Supplier; public final class GeyserServer { private static final boolean PRINT_DEBUG_PINGS = Boolean.parseBoolean(System.getProperty("Geyser.PrintPingsInDebugMode", "true")); @@ -163,8 +164,9 @@ public final class GeyserServer { if (System.getProperties().contains("disableNativeEventLoop")) { this.geyser.getLogger().debug("EventLoop type is NIO because native event loops are disabled."); } else { - this.geyser.getLogger().debug("Reason for no Epoll: " + Epoll.unavailabilityCause().toString()); - this.geyser.getLogger().debug("Reason for no KQueue: " + KQueue.unavailabilityCause().toString()); + // Use lambda here, not method reference, or else NoClassDefFoundError for Epoll/KQueue will not be caught + this.geyser.getLogger().debug("Reason for no Epoll: " + throwableOrCaught(() -> Epoll.unavailabilityCause())); + this.geyser.getLogger().debug("Reason for no KQueue: " + throwableOrCaught(() -> KQueue.unavailabilityCause())); } } } @@ -230,7 +232,9 @@ public final class GeyserServer { GeyserPingInfo pingInfo = null; if (config.isPassthroughMotd() || config.isPassthroughPlayerCounts()) { IGeyserPingPassthrough pingPassthrough = geyser.getBootstrap().getGeyserPingPassthrough(); - pingInfo = pingPassthrough.getPingInformation(inetSocketAddress); + if (pingPassthrough != null) { + pingInfo = pingPassthrough.getPingInformation(inetSocketAddress); + } } BedrockPong pong = new BedrockPong() @@ -312,6 +316,17 @@ public final class GeyserServer { return pong; } + /** + * @return the throwable from the given supplier, or the throwable caught while calling the supplier. + */ + private static Throwable throwableOrCaught(Supplier supplier) { + try { + return supplier.get(); + } catch (Throwable throwable) { + return throwable; + } + } + private static Transport compatibleTransport() { TransportHelper.TransportMethod transportMethod = TransportHelper.determineTransportMethod(); if (transportMethod == TransportHelper.TransportMethod.EPOLL) { diff --git a/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java b/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java index d444e554c..9d8da114d 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java +++ b/core/src/main/java/org/geysermc/geyser/ping/GeyserPingInfo.java @@ -25,34 +25,37 @@ package org.geysermc.geyser.ping; -import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.annotation.JsonIgnoreProperties; import com.fasterxml.jackson.annotation.JsonSetter; import com.fasterxml.jackson.databind.JsonNode; import lombok.Data; +import org.checkerframework.checker.nullness.qual.Nullable; -import java.util.ArrayList; -import java.util.Collection; - +/** + * The structure of this class and its nested classes are specifically + * designed for the format received by {@link GeyserLegacyPingPassthrough}. + */ @Data @JsonIgnoreProperties(ignoreUnknown = true) public class GeyserPingInfo { + @Nullable private String description; private Players players; - private Version version; - - @JsonIgnore - private Collection playerList = new ArrayList<>(); public GeyserPingInfo() { + // for json mapping } - public GeyserPingInfo(String description, Players players, Version version) { + public GeyserPingInfo(@Nullable String description, Players players) { this.description = description; this.players = players; - this.version = version; + } + + public GeyserPingInfo(@Nullable String description, int maxPlayers, int onlinePlayers) { + this.description = description; + this.players = new Players(maxPlayers, onlinePlayers); } @JsonSetter("description") @@ -68,6 +71,7 @@ public class GeyserPingInfo { private int online; public Players() { + // for json mapping } public Players(int max, int online) { @@ -75,19 +79,4 @@ public class GeyserPingInfo { this.online = online; } } - - @Data - public static class Version { - - private String name; - private int protocol; - - public Version() { - } - - public Version(String name, int protocol) { - this.name = name; - this.protocol = protocol; - } - } } diff --git a/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java b/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java index d414b7fa8..b6095cce2 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java +++ b/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.ping; import javax.annotation.Nullable; -import java.net.Inet4Address; import java.net.InetSocketAddress; /** @@ -34,16 +33,6 @@ import java.net.InetSocketAddress; */ public interface IGeyserPingPassthrough { - /** - * Get the MOTD of the server displayed on the multiplayer screen. It uses a fake remote, as the remote isn't important in this context. - * - * @return string of the MOTD - */ - @Nullable - default GeyserPingInfo getPingInformation() { - return this.getPingInformation(new InetSocketAddress(Inet4Address.getLoopbackAddress(), 69)); - } - /** * Get the MOTD of the server displayed on the multiplayer screen * diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index 8e4db5e38..218e13833 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -91,9 +91,6 @@ command-suggestions: true # The following three options enable "ping passthrough" - the MOTD, player count and/or protocol name gets retrieved from the Java server. # Relay the MOTD from the remote server to Bedrock players. passthrough-motd: false -# Relay the protocol name (e.g. BungeeCord [X.X], Paper 1.X) - only really useful when using a custom protocol name! -# This will also show up on sites like MCSrvStatus. -passthrough-protocol-name: false # Relay the player count and max players from the remote server to Bedrock players. passthrough-player-counts: false # Enable LEGACY ping passthrough. There is no need to enable this unless your MOTD or player count does not appear properly. From 118e7699767e07f24304155843ede2d0cfc79dd5 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 14 Nov 2023 00:33:34 +0100 Subject: [PATCH 23/86] Fix issues with empty MOTDs - fallback to configured MOTD (#4259) * Fix issues with empty MOTDs - fallback to configured MOTD --------- Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> --- .../java/org/geysermc/geyser/network/netty/GeyserServer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java index a811d8437..20340826f 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java @@ -249,8 +249,8 @@ public final class GeyserServer { if (config.isPassthroughMotd() && pingInfo != null && pingInfo.getDescription() != null) { String[] motd = MessageTranslator.convertMessageLenient(pingInfo.getDescription()).split("\n"); - String mainMotd = motd[0]; // First line of the motd. - String subMotd = (motd.length != 1) ? motd[1] : GeyserImpl.NAME; // Second line of the motd if present, otherwise default. + String mainMotd = (motd.length > 0) ? motd[0] : config.getBedrock().primaryMotd(); // First line of the motd. + String subMotd = (motd.length > 1) ? motd[1] : config.getBedrock().secondaryMotd(); // Second line of the motd if present, otherwise default. pong.motd(mainMotd.trim()); pong.subMotd(subMotd.trim()); // Trimmed to shift it to the left, prevents the universe from collapsing on us just because we went 2 characters over the text box's limit. From dec0d13d8e2e29fb62bb470fdf5ca8e753618e94 Mon Sep 17 00:00:00 2001 From: rtm516 Date: Fri, 17 Nov 2023 11:59:40 +0000 Subject: [PATCH 24/86] Delete Jenkinsfile (#4181) --- Jenkinsfile | 28 ---------------------------- 1 file changed, 28 deletions(-) delete mode 100644 Jenkinsfile diff --git a/Jenkinsfile b/Jenkinsfile deleted file mode 100644 index fceed8498..000000000 --- a/Jenkinsfile +++ /dev/null @@ -1,28 +0,0 @@ -pipeline { - agent any - tools { - gradle 'Gradle 7' - jdk 'Java 17' - } - options { - buildDiscarder(logRotator(artifactNumToKeepStr: '20')) - } - stages { - stage ('Build') { - steps { - sh 'git submodule update --init --recursive' - rtGradleRun( - usesPlugin: true, - tool: 'Gradle 7', - buildFile: 'build.gradle.kts', - tasks: 'clean build', - ) - } - post { - success { - archiveArtifacts artifacts: 'bootstrap/**/build/libs/Geyser-*.jar', fingerprint: true - } - } - } - } -} From 44174fdc0482e6d28dedd92db38785a41213c13a Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 21 Nov 2023 23:31:56 +0100 Subject: [PATCH 25/86] Add 1.20.50 Bedrock support (#4296) * Start on 1.20.50 * Add 1.20.50 block_palette.1_20_50.nbt, creative_items.1_20_50.json and runtime_item_states.1_20_50.json * fix stone and planks mappings * add and do something with the new SetPlayerInventoryOptionsPacket * Add readme version bump * Cleanup/Explain the new BedrockSetPlayerInventoryOptionsTranslator --- README.md | 2 +- .../geysermc/geyser/network/GameProtocol.java | 6 +- .../geyser/network/LoggingPacketHandler.java | 22 +- .../populator/BlockRegistryPopulator.java | 9 +- .../populator/ItemRegistryPopulator.java | 15 + ...ckSetPlayerInventoryOptionsTranslator.java | 63 + .../bedrock/block_palette.1_20_50.nbt | Bin 0 -> 170466 bytes .../bedrock/creative_items.1_20_50.json | 5787 ++++++++++++++++ .../bedrock/runtime_item_states.1_20_50.json | 5846 +++++++++++++++++ gradle/libs.versions.toml | 6 +- 10 files changed, 11734 insertions(+), 22 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerInventoryOptionsTranslator.java create mode 100644 core/src/main/resources/bedrock/block_palette.1_20_50.nbt create mode 100644 core/src/main/resources/bedrock/creative_items.1_20_50.json create mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_20_50.json diff --git a/README.md b/README.md index 07fb34209..b878db64d 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! -### Currently supporting Minecraft Bedrock 1.20.0 - 1.20.40 and Minecraft Java 1.20.2 +### Currently supporting Minecraft Bedrock 1.20.0 - 1.20.50 and Minecraft Java 1.20.2 ## Setting Up Take a look [here](https://wiki.geysermc.org/geyser/setup/) for how to set up Geyser. diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index 5555375cd..4ffdbcf48 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -32,6 +32,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618; import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; +import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.geyser.session.GeyserSession; @@ -47,7 +48,7 @@ public final class GameProtocol { * Default Bedrock codec that should act as a fallback. Should represent the latest available * release of the game that Geyser supports. */ - public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v622.CODEC; + public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v630.CODEC; /** * A list of all supported Bedrock versions that can join Geyser @@ -70,6 +71,9 @@ public final class GameProtocol { SUPPORTED_BEDROCK_CODECS.add(Bedrock_v618.CODEC.toBuilder() .minecraftVersion("1.20.30/1.20.32") .build()); + SUPPORTED_BEDROCK_CODECS.add(Bedrock_v622.CODEC.toBuilder() + .minecraftVersion("1.20.40/1.20.41") + .build()); SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); } diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index 61c8dbe3d..ec1bef1df 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -32,7 +32,7 @@ import org.geysermc.geyser.session.GeyserSession; /** * Bare bones implementation of BedrockPacketHandler suitable for extension. - * + *

* Logs and ignores all packets presented. Allows subclasses to override/implement only * packets of interest and limit boilerplate code. */ @@ -60,11 +60,6 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } - @Override - public PacketSignal handle(AdventureSettingsPacket packet) { - return defaultHandler(packet); - } - @Override public PacketSignal handle(AnimatePacket packet) { return defaultHandler(packet); @@ -120,11 +115,6 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } - @Override - public PacketSignal handle(CraftingEventPacket packet) { - return defaultHandler(packet); - } - @Override public PacketSignal handle(EntityEventPacket packet) { return defaultHandler(packet); @@ -505,11 +495,6 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } - @Override - public PacketSignal handle(ScriptCustomEventPacket packet) { - return defaultHandler(packet); - } - @Override public PacketSignal handle(ServerSettingsResponsePacket packet) { return defaultHandler(packet); @@ -560,6 +545,11 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } + @Override + public PacketSignal handle(SetPlayerInventoryOptionsPacket packet) { + return defaultHandler(packet); + } + @Override public PacketSignal handle(SetScoreboardIdentityPacket packet) { return defaultHandler(packet); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 278ebadfb..265c6b1f7 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -37,12 +37,17 @@ import org.cloudburstmc.blockstateupdater.BlockStateUpdater; import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_10; import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_30; import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_40; +import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_50; import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext; -import org.cloudburstmc.nbt.*; +import org.cloudburstmc.nbt.NBTInputStream; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtMapBuilder; +import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618; import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; +import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -120,12 +125,14 @@ public final class BlockRegistryPopulator { Remapper mapper594 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE); Remapper mapper618 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE, BlockStateUpdater_1_20_30.INSTANCE); Remapper mapper622 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE, BlockStateUpdater_1_20_30.INSTANCE, BlockStateUpdater_1_20_40.INSTANCE); + Remapper mapper630 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE, BlockStateUpdater_1_20_30.INSTANCE, BlockStateUpdater_1_20_40.INSTANCE, BlockStateUpdater_1_20_50.INSTANCE); var blockMappers = ImmutableMap., Remapper>builder() .put(ObjectIntPair.of("1_20_0", Bedrock_v589.CODEC.getProtocolVersion()), tag -> tag) .put(ObjectIntPair.of("1_20_10", Bedrock_v594.CODEC.getProtocolVersion()), mapper594) .put(ObjectIntPair.of("1_20_30", Bedrock_v618.CODEC.getProtocolVersion()), mapper618) .put(ObjectIntPair.of("1_20_40", Bedrock_v622.CODEC.getProtocolVersion()), mapper622) + .put(ObjectIntPair.of("1_20_50", Bedrock_v630.CODEC.getProtocolVersion()), mapper630) .build(); // We can keep this strong as nothing should be garbage collected diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 857726038..fe6e21e6f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -42,6 +42,7 @@ import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618; import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; +import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; @@ -113,11 +114,25 @@ public class ItemRegistryPopulator { return mapping; }; + Remapper remapper630 = (item, mapping) -> { + mapping = remapper618.remap(item, mapping); // apply 1.20.30 remapper first + + String id = item.javaIdentifier(); + // 1.20.50 replaced stone & planks to individual stone types + // E.g.: granite, diorite, andesite, polished variants, dark_oak_planks etc + if (mapping.getBedrockIdentifier().equals("minecraft:stone") || mapping.getBedrockIdentifier().equals("minecraft:planks")) { + return mapping.withBedrockIdentifier(id); + } + + return mapping; + }; + List paletteVersions = new ArrayList<>(3); paletteVersions.add(new PaletteVersion("1_20_0", Bedrock_v589.CODEC.getProtocolVersion())); paletteVersions.add(new PaletteVersion("1_20_10", Bedrock_v594.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper594)); paletteVersions.add(new PaletteVersion("1_20_30", Bedrock_v618.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper618)); paletteVersions.add(new PaletteVersion("1_20_40", Bedrock_v622.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper618)); // NO item changes between 1.20.30 and 1.20.40 + paletteVersions.add(new PaletteVersion("1_20_50", Bedrock_v630.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper630)); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerInventoryOptionsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerInventoryOptionsTranslator.java new file mode 100644 index 000000000..0f07d84da --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/player/BedrockSetPlayerInventoryOptionsTranslator.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.protocol.bedrock.entity.player; + +import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode; +import com.github.steveice10.mc.protocol.data.game.inventory.CraftingBookStateType; +import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundRecipeBookChangeSettingsPacket; +import org.cloudburstmc.protocol.bedrock.data.inventory.InventoryTabLeft; +import org.cloudburstmc.protocol.bedrock.data.inventory.InventoryTabRight; +import org.cloudburstmc.protocol.bedrock.packet.SetPlayerInventoryOptionsPacket; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; + +@Translator(packet = SetPlayerInventoryOptionsPacket.class) +public class BedrockSetPlayerInventoryOptionsTranslator extends PacketTranslator { + + @Override + public void translate(GeyserSession session, SetPlayerInventoryOptionsPacket packet) { + // Sent by 1.20.50+ - we can pass it through to the java server + + // This should ensure that we never send these packets when the player inventory is opened while in creative + // Java edition can't craft in the 2x2 grid in creative, and subsequently doesn't have a recipe book + if (session.getGameMode() == GameMode.CREATIVE && session.getPlayerInventory() == session.getOpenInventory()) { + return; + } + + boolean filtered = packet.isFiltering(); + boolean bookOpen = isBookOpen(packet.getLeftTab(), packet.getRightTab()); + + // Hardcoded to crafting; bedrock does not have any furnace recipe books + session.sendDownstreamPacket(new ServerboundRecipeBookChangeSettingsPacket(CraftingBookStateType.CRAFTING, bookOpen, filtered)); + } + + private boolean isBookOpen(InventoryTabLeft leftTab, InventoryTabRight rightTab) { + boolean leftOpen = (leftTab != InventoryTabLeft.NONE && leftTab != InventoryTabLeft.SURVIVAL); + boolean rightOpen = rightTab == InventoryTabRight.CRAFTING; + return leftOpen || rightOpen; + } +} diff --git a/core/src/main/resources/bedrock/block_palette.1_20_50.nbt b/core/src/main/resources/bedrock/block_palette.1_20_50.nbt new file mode 100644 index 0000000000000000000000000000000000000000..0eecda74f72dcf026d3f665c050d04a1f8485bb8 GIT binary patch literal 170466 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 JkFhIPadz0t*h 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

oYIzSyh{iiN^y?}E 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 LqW$og#cL=429 Date: Wed, 22 Nov 2023 22:03:24 +0100 Subject: [PATCH 26/86] Don't send an awkward "null" when a exeption disconnect cause doesn't have a message (#4306) * Don't send an awkward "null" when a cause doesn't have a message * Fix accidental regression leading to unhandled "CraftingEventPackets" --- .../org/geysermc/geyser/network/LoggingPacketHandler.java | 5 +++++ .../java/org/geysermc/geyser/session/GeyserSession.java | 6 +++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index ec1bef1df..80e624895 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -115,6 +115,11 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } + @Override + public PacketSignal handle(CraftingEventPacket packet) { + return defaultHandler(packet); + } + @Override public PacketSignal handle(EntityEventPacket packet) { return defaultHandler(packet); diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index ebb0025da..9bfb4e01c 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1039,7 +1039,11 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { geyser.getLogger().info(GeyserLocale.getLocaleStringLog("geyser.network.remote.disconnect", authData.name(), remoteServer.address(), disconnectMessage)); } if (cause != null) { - GeyserImpl.getInstance().getLogger().error(cause.getMessage()); + if (cause.getMessage() != null) { + GeyserImpl.getInstance().getLogger().error(cause.getMessage()); + } else { + GeyserImpl.getInstance().getLogger().error("An exception occurred: ", cause); + } // GeyserSession is disconnected via session.disconnect() called indirectly be the server // This only needs to be "initiated" here when there is an exception, hence the cause clause GeyserSession.this.disconnect(disconnectMessage); From 3292718e696b2e26b89750e339de4267a70c422d Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 23 Nov 2023 09:51:57 +0100 Subject: [PATCH 27/86] Don't show custom names on display entities (#4309) * Ensure that a custom text display entity name doesn't show up - it doesn't show on Java, and if we show it, the text display contents aren't shown. * Update core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> --------- Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> --- .../org/geysermc/geyser/entity/type/TextDisplayEntity.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java index 703d5210b..0b6160401 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/TextDisplayEntity.java @@ -34,6 +34,7 @@ import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.text.MessageTranslator; +import java.util.Optional; import java.util.UUID; // Note: 1.19.4 requires that the billboard is set to something in order to show, on Java Edition @@ -56,6 +57,12 @@ public class TextDisplayEntity extends Entity { // On JE: Hiding the display name still shows the display entity text. } + @Override + public void setDisplayName(EntityMetadata, ?> entityMetadata) { + // This would usually set EntityDataTypes.NAME, but we are instead using NAME for the text display. + // On JE: custom name does not override text display. + } + public void setText(EntityMetadata entityMetadata) { this.dirtyMetadata.put(EntityDataTypes.NAME, MessageTranslator.convertMessage(entityMetadata.getValue())); } From 0f50a3cbe604f6c4ab8d6004c6dd09d7a071879c Mon Sep 17 00:00:00 2001 From: Kas-tle <26531652+Kas-tle@users.noreply.github.com> Date: Tue, 28 Nov 2023 20:33:07 -0800 Subject: [PATCH 28/86] Re-implement subchunk v9 with proper index (#4287) * Re-implement subchunk v9 with proper index Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> * typo in comment --------- Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- build.gradle.kts | 4 +++- .../level/chunk/GeyserChunkSection.java | 19 +++++++++------- .../JavaLevelChunkWithLightTranslator.java | 22 +++++++++++-------- .../org/geysermc/geyser/util/ChunkUtils.java | 22 +++++++++++++------ 4 files changed, 42 insertions(+), 25 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 9eb8a6ed0..d7360b701 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,5 +1,7 @@ plugins { `java-library` + // Ensure AP works in eclipse (no effect on other IDEs) + `eclipse` id("geyser.build-logic") id("io.freefair.lombok") version "6.3.0" apply false } @@ -35,4 +37,4 @@ subprojects { in platforms -> plugins.apply("geyser.platform-conventions") else -> plugins.apply("geyser.base-conventions") } -} \ No newline at end of file +} diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java index f3e6b8399..8a3534a8e 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/GeyserChunkSection.java @@ -30,18 +30,20 @@ import org.cloudburstmc.protocol.common.util.Preconditions; public class GeyserChunkSection { - // Temporary reversion to v8 as it reduces the frequnecy of https://github.com/GeyserMC/Geyser/issues/4240 - // This does not fully resolve the issue so a better solution is still needed - private static final int CHUNK_SECTION_VERSION = 8; + // As of at least 1.19.80 + private static final int CHUNK_SECTION_VERSION = 9; private final BlockStorage[] storage; + // Counts up from 00 for y >= 0 and down from FF for y < 0 + private final int subChunkIndex; - public GeyserChunkSection(int airBlockId) { - this(new BlockStorage[]{new BlockStorage(airBlockId), new BlockStorage(airBlockId)}); + public GeyserChunkSection(int airBlockId, int subChunkIndex) { + this(new BlockStorage[]{new BlockStorage(airBlockId), new BlockStorage(airBlockId)}, subChunkIndex); } - public GeyserChunkSection(BlockStorage[] storage) { + public GeyserChunkSection(BlockStorage[] storage, int subChunkIndex) { this.storage = storage; + this.subChunkIndex = subChunkIndex; } public int getFullBlock(int x, int y, int z, int layer) { @@ -60,6 +62,7 @@ public class GeyserChunkSection { buffer.writeByte(CHUNK_SECTION_VERSION); buffer.writeByte(this.storage.length); // Required for chunk version 9+ + buffer.writeByte(this.subChunkIndex); for (BlockStorage blockStorage : this.storage) { blockStorage.writeToNetwork(buffer); } @@ -86,12 +89,12 @@ public class GeyserChunkSection { return true; } - public GeyserChunkSection copy() { + public GeyserChunkSection copy(int subChunkIndex) { BlockStorage[] storage = new BlockStorage[this.storage.length]; for (int i = 0; i < storage.length; i++) { storage[i] = this.storage[i].copy(); } - return new GeyserChunkSection(storage); + return new GeyserChunkSection(storage, subChunkIndex); } public static int blockPosition(int x, int y, int z) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 85eec40e0..9a8681542 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -78,7 +78,8 @@ import java.util.BitSet; import java.util.List; import java.util.Map; -import static org.geysermc.geyser.util.ChunkUtils.SERIALIZED_CHUNK_DATA; +import static org.geysermc.geyser.util.ChunkUtils.EMPTY_BLOCK_STORAGE; +import static org.geysermc.geyser.util.ChunkUtils.EMPTY_CHUNK_SECTION_SIZE; import static org.geysermc.geyser.util.ChunkUtils.indexYZXtoXZY; @Translator(packet = ClientboundLevelChunkWithLightPacket.class) @@ -127,6 +128,7 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator> 4)); + int subChunkIndex = sectionY + yOffset; if (bedrockSectionY < 0 || maxBedrockSectionY < bedrockSectionY) { // Ignore this chunk section since it goes outside the bounds accepted by the Bedrock client if (useExtendedCollisions) { @@ -154,7 +156,7 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator> 4) - (bedrockDimension.minY() >> 4); + int subChunkIndex = (y >> 4) + (bedrockDimension.minY() >> 4); if (0 <= bedrockSectionY && bedrockSectionY < maxBedrockSectionY) { // Custom skull is in a section accepted by Bedrock GeyserChunkSection bedrockSection = sections[bedrockSectionY]; IntList palette = bedrockSection.getBlockStorageArray()[0].getPalette(); if (palette instanceof IntImmutableList || palette instanceof IntLists.Singleton) { // TODO there has to be a better way to expand the palette .-. - bedrockSection = bedrockSection.copy(); + bedrockSection = bedrockSection.copy(subChunkIndex); sections[bedrockSectionY] = bedrockSection; } bedrockSection.setFullBlock(x, y & 0xF, z, 0, blockDefinition.getRuntimeId()); @@ -458,7 +461,7 @@ public class JavaLevelChunkWithLightTranslator extends PacketTranslator> 4)); + new GeyserChunkSection(EMPTY_BLOCK_STORAGE, subChunkIndex).writeToNetwork(byteBuf); } } diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index cded234f9..114a7b6de 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -54,19 +54,27 @@ import static org.geysermc.geyser.level.block.BlockStateValues.JAVA_AIR_ID; @UtilityClass public class ChunkUtils { - /** - * An empty subchunk. - */ - public static final byte[] SERIALIZED_CHUNK_DATA; + public static final byte[] EMPTY_BIOME_DATA; + public static final BlockStorage[] EMPTY_BLOCK_STORAGE; + + public static final int EMPTY_CHUNK_SECTION_SIZE; + static { + EMPTY_BLOCK_STORAGE = new BlockStorage[0]; + ByteBuf byteBuf = Unpooled.buffer(); try { - new GeyserChunkSection(new BlockStorage[0]) + new GeyserChunkSection(EMPTY_BLOCK_STORAGE, 0) .writeToNetwork(byteBuf); - SERIALIZED_CHUNK_DATA = new byte[byteBuf.readableBytes()]; - byteBuf.readBytes(SERIALIZED_CHUNK_DATA); + + byte[] emptyChunkData = new byte[byteBuf.readableBytes()]; + byteBuf.readBytes(emptyChunkData); + + EMPTY_CHUNK_SECTION_SIZE = emptyChunkData.length; + + emptyChunkData = null; } finally { byteBuf.release(); } From 11945db7a040587d71390443fa67cde4d131e2e9 Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 1 Dec 2023 10:27:42 +0100 Subject: [PATCH 29/86] Clear mob spawners if the Java server so requests (#4232) * Clear mob spawners if the Java server so requests * Empty spawners by replacing the spawner block with a new one instead of adding an invalid identifier to them. Unfortunately, sending one UpdateBlockPacket that replaces the spawner does not work, we need to set the spawner to air first. Cool. But at least we don't summon particles for all empty spawners now * store position vector (address review by @konicai) * remove empty line --- .../populator/BlockRegistryPopulator.java | 8 ++++- .../geyser/registry/type/BlockMappings.java | 1 + .../block/entity/BlockEntityTranslator.java | 3 +- .../entity/SpawnerBlockEntityTranslator.java | 36 +++++++++++++++++-- .../level/JavaBlockEntityDataTranslator.java | 4 +-- .../JavaLevelChunkWithLightTranslator.java | 2 +- 6 files changed, 47 insertions(+), 7 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 265c6b1f7..e3f4e685d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -221,6 +221,7 @@ public final class BlockRegistryPopulator { GeyserBedrockBlock airDefinition = null; BlockDefinition commandBlockDefinition = null; + BlockDefinition mobSpawnerBlockDefinition = null; BlockDefinition waterDefinition = null; BlockDefinition movingBlockDefinition = null; Iterator> blocksIterator = BLOCKS_JSON.fields(); @@ -269,6 +270,7 @@ public final class BlockRegistryPopulator { case "minecraft:air" -> airDefinition = bedrockDefinition; case "minecraft:water[level=0]" -> waterDefinition = bedrockDefinition; case "minecraft:command_block[conditional=false,facing=north]" -> commandBlockDefinition = bedrockDefinition; + case "minecraft:spawner" -> mobSpawnerBlockDefinition = bedrockDefinition; case "minecraft:moving_piston[facing=north,type=normal]" -> movingBlockDefinition = bedrockDefinition; } @@ -298,9 +300,13 @@ public final class BlockRegistryPopulator { if (commandBlockDefinition == null) { throw new AssertionError("Unable to find command block in palette"); } - builder.commandBlock(commandBlockDefinition); + if (mobSpawnerBlockDefinition == null) { + throw new AssertionError("Unable to find mob spawner block in palette"); + } + builder.mobSpawnerBlock(mobSpawnerBlockDefinition); + if (waterDefinition == null) { throw new AssertionError("Unable to find water in palette"); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java index 80be3fbce..3d06cecac 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java @@ -54,6 +54,7 @@ public class BlockMappings implements DefinitionRegistry { int[] remappedVanillaIds; BlockDefinition commandBlock; + BlockDefinition mobSpawnerBlock; Map itemFrames; Map flowerPotBlocks; diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java index b89a2a547..7566e0d90 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BlockEntityTranslator.java @@ -30,6 +30,7 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.Tag; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; +import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.BlockEntityUtils; /** @@ -41,7 +42,7 @@ public abstract class BlockEntityTranslator { public abstract void translateTag(NbtMapBuilder builder, CompoundTag tag, int blockState); - public NbtMap getBlockEntityTag(BlockEntityType type, int x, int y, int z, CompoundTag tag, int blockState) { + public NbtMap getBlockEntityTag(GeyserSession session, BlockEntityType type, int x, int y, int z, CompoundTag tag, int blockState) { NbtMapBuilder tagBuilder = getConstantBedrockTag(BlockEntityUtils.getBedrockBlockEntityId(type), x, y, z); translateTag(tagBuilder, tag, blockState); return tagBuilder.build(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java index d1af70d8d..0aa8af279 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java @@ -29,12 +29,44 @@ import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityType; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.cloudburstmc.math.vector.Vector3i; +import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; +import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.session.GeyserSession; @BlockEntity(type = BlockEntityType.MOB_SPAWNER) public class SpawnerBlockEntityTranslator extends BlockEntityTranslator { + + @Override + public NbtMap getBlockEntityTag(GeyserSession session, BlockEntityType type, int x, int y, int z, CompoundTag tag, int blockState) { + // Sending an empty EntityIdentifier to empty the spawner is ignored by the client, so we send a whole new spawner! + // Fixes https://github.com/GeyserMC/Geyser/issues/4214 + CompoundTag spawnData = tag.get("SpawnData"); + if (spawnData != null) { + CompoundTag entityTag = spawnData.get("entity"); + if (entityTag.isEmpty()) { + Vector3i position = Vector3i.from(x, y, z); + // Set to air and back to reset the spawner - "just" updating the spawner doesn't work + UpdateBlockPacket emptyBlockPacket = new UpdateBlockPacket(); + emptyBlockPacket.setDataLayer(0); + emptyBlockPacket.setBlockPosition(position); + emptyBlockPacket.setDefinition(session.getBlockMappings().getBedrockAir()); + session.sendUpstreamPacket(emptyBlockPacket); + + UpdateBlockPacket spawnerBlockPacket = new UpdateBlockPacket(); + spawnerBlockPacket.setDataLayer(0); + spawnerBlockPacket.setBlockPosition(position); + spawnerBlockPacket.setDefinition(session.getBlockMappings().getMobSpawnerBlock()); + session.sendUpstreamPacket(spawnerBlockPacket); + } + } + + return super.getBlockEntityTag(session, type, x, y, z, tag, blockState); + } + @Override public void translateTag(NbtMapBuilder builder, CompoundTag tag, int blockState) { Tag current; @@ -69,8 +101,8 @@ public class SpawnerBlockEntityTranslator extends BlockEntityTranslator { CompoundTag spawnData = tag.get("SpawnData"); if (spawnData != null) { - StringTag idTag = ((CompoundTag) spawnData.get("entity")).get("id"); - if (idTag != null) { + CompoundTag entityTag = spawnData.get("entity"); + if (entityTag.get("id") instanceof StringTag idTag) { // As of 1.19.3, spawners can be empty String entityId = idTag.getValue(); builder.put("EntityIdentifier", entityId); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java index b86882d84..c67a6dee4 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEntityDataTranslator.java @@ -62,7 +62,7 @@ public class JavaBlockEntityDataTranslator extends PacketTranslator Date: Fri, 1 Dec 2023 20:38:25 +0100 Subject: [PATCH 30/86] Fix: Recipe tags application We only need to use recipe tags when there is more than one possible ingredient option. For example, before this, we applied a logs item tag to the planks recipe, which caused an issue with plank type suggestions. (#4321) --- .../translator/protocol/java/JavaUpdateRecipesTranslator.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java index 5beb1a201..71cb6019a 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java @@ -337,7 +337,7 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator 1) { optionSet.add(new ItemDescriptorWithCount(new ItemTagDescriptor(recipeTag), groupedItem.count)); continue; } From 308f293021e261a4504fea5831f6e32d5333ffd1 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 4 Dec 2023 01:44:06 +0100 Subject: [PATCH 31/86] Fix potential issue with the settings form - coordinate showing might change while we are in the settings menu (#4324) --- .../geysermc/geyser/util/SettingsUtils.java | 36 +++++++++++-------- 1 file changed, 22 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java b/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java index 8a8d684f6..ed97408b9 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SettingsUtils.java @@ -49,28 +49,32 @@ public class SettingsUtils { .title("geyser.settings.title.main") .iconPath("textures/ui/settings_glyph_color_2x.png"); + // Let's store these to avoid issues + boolean showCoordinates = session.getPreferencesCache().isAllowShowCoordinates(); + boolean cooldownShown = CooldownUtils.getDefaultShowCooldown() != CooldownUtils.CooldownType.DISABLED; + boolean customSkulls = session.getGeyser().getConfig().isAllowCustomSkulls(); + // Only show the client title if any of the client settings are available - boolean showClientSettings = session.getPreferencesCache().isAllowShowCoordinates() - || CooldownUtils.getDefaultShowCooldown() != CooldownUtils.CooldownType.DISABLED - || session.getGeyser().getConfig().isAllowCustomSkulls(); + boolean showClientSettings = showCoordinates || cooldownShown || customSkulls; if (showClientSettings) { builder.label("geyser.settings.title.client"); // Client can only see its coordinates if reducedDebugInfo is disabled and coordinates are enabled in geyser config. - if (session.getPreferencesCache().isAllowShowCoordinates()) { + if (showCoordinates) { builder.toggle("%createWorldScreen.showCoordinates", session.getPreferencesCache().isPrefersShowCoordinates()); } - if (CooldownUtils.getDefaultShowCooldown() != CooldownUtils.CooldownType.DISABLED) { + if (cooldownShown) { DropdownComponent.Builder cooldownDropdown = DropdownComponent.builder("options.attackIndicator"); - cooldownDropdown.option("options.attack.crosshair", session.getPreferencesCache().getCooldownPreference() == CooldownUtils.CooldownType.TITLE); - cooldownDropdown.option("options.attack.hotbar", session.getPreferencesCache().getCooldownPreference() == CooldownUtils.CooldownType.ACTIONBAR); - cooldownDropdown.option("options.off", session.getPreferencesCache().getCooldownPreference() == CooldownUtils.CooldownType.DISABLED); + CooldownUtils.CooldownType currentCooldownType = session.getPreferencesCache().getCooldownPreference(); + cooldownDropdown.option("options.attack.crosshair", currentCooldownType == CooldownUtils.CooldownType.TITLE); + cooldownDropdown.option("options.attack.hotbar", currentCooldownType == CooldownUtils.CooldownType.ACTIONBAR); + cooldownDropdown.option("options.off", currentCooldownType == CooldownUtils.CooldownType.DISABLED); builder.dropdown(cooldownDropdown); } - if (session.getGeyser().getConfig().isAllowCustomSkulls()) { + if (customSkulls) { builder.toggle("geyser.settings.option.customSkulls", session.getPreferencesCache().isPrefersCustomSkulls()); } } @@ -94,17 +98,21 @@ public class SettingsUtils { builder.validResultHandler((response) -> { if (showClientSettings) { // Client can only see its coordinates if reducedDebugInfo is disabled and coordinates are enabled in geyser config. - if (session.getPreferencesCache().isAllowShowCoordinates()) { - session.getPreferencesCache().setPrefersShowCoordinates(response.next()); - session.getPreferencesCache().updateShowCoordinates(); + if (showCoordinates) { + // In theory, a server could update the gamerule while the client is in the settings menu. + // We need to still read the response to update the client's preference, but we don't want to update the gamerule. + if (session.getPreferencesCache().isAllowShowCoordinates()) { + session.getPreferencesCache().setPrefersShowCoordinates(response.next()); + session.getPreferencesCache().updateShowCoordinates(); + } } - if (CooldownUtils.getDefaultShowCooldown() != CooldownUtils.CooldownType.DISABLED) { + if (cooldownShown) { CooldownUtils.CooldownType cooldownType = CooldownUtils.CooldownType.VALUES[(int) response.next()]; session.getPreferencesCache().setCooldownPreference(cooldownType); } - if (session.getGeyser().getConfig().isAllowCustomSkulls()) { + if (customSkulls) { session.getPreferencesCache().setPrefersCustomSkulls(response.next()); } } From 998caee156d38245a15e560f15864319ad125cbb Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Mon, 4 Dec 2023 17:05:12 -0500 Subject: [PATCH 32/86] Catch all throwables when loading each extension (#4320) --- .../geyser/extension/GeyserExtensionLoader.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java index da0fbffda..2f0ff1580 100644 --- a/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java +++ b/core/src/main/java/org/geysermc/geyser/extension/GeyserExtensionLoader.java @@ -56,7 +56,7 @@ public class GeyserExtensionLoader extends ExtensionLoader { private final Map extensionContainers = new HashMap<>(); private final Path extensionsDirectory = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("extensions"); - public GeyserExtensionContainer loadExtension(Path path, GeyserExtensionDescription description) throws InvalidExtensionException { + public GeyserExtensionContainer loadExtension(Path path, GeyserExtensionDescription description) throws Throwable { if (path == null) { throw new InvalidExtensionException("Path is null"); } @@ -92,8 +92,14 @@ public class GeyserExtensionLoader extends ExtensionLoader { this.classLoaders.put(description.id(), loader); - final Extension extension = loader.load(); - return this.setup(extension, description, dataFolder, new GeyserExtensionEventBus(GeyserImpl.getInstance().eventBus(), extension)); + try { + final Extension extension = loader.load(); + return this.setup(extension, description, dataFolder, new GeyserExtensionEventBus(GeyserImpl.getInstance().eventBus(), extension)); + } catch (Throwable e) { + // if the extension failed to load, remove its classloader and close it. + this.classLoaders.remove(description.id()).close(); + throw e; + } } private GeyserExtensionContainer setup(Extension extension, GeyserExtensionDescription description, Path dataFolder, ExtensionEventBus eventBus) { @@ -182,9 +188,10 @@ public class GeyserExtensionLoader extends ExtensionLoader { return; } + GeyserExtensionContainer container = this.loadExtension(path, description); extensions.put(id, path); - loadedExtensions.put(id, this.loadExtension(path, description)); - } catch (Exception e) { + loadedExtensions.put(id, container); + } catch (Throwable e) { GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.extensions.load.failed_with_name", path.getFileName(), path.toAbsolutePath()), e); } }); From 95d65350e42bbffa0d2901e2b8a558968d85f24a Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 6 Dec 2023 00:54:42 +0100 Subject: [PATCH 33/86] Project wide syntax/annotation cleanup (#4238) Co-authored-by: Konicai <71294714+Konicai@users.noreply.github.com> --- CONTRIBUTING.md | 18 +- .../geyser/processor/ClassProcessor.java | 4 +- .../org/geysermc/geyser/api/GeyserApi.java | 1 + .../api/bedrock/camera/CameraShake.java | 2 +- .../custom/component/PlacementConditions.java | 6 +- .../custom/nonvanilla/JavaBlockState.java | 12 +- .../custom/nonvanilla/JavaBoundingBox.java | 4 +- .../geysermc/geyser/api/event/EventBus.java | 1 - .../geyser/api/event/EventSubscriber.java | 1 - .../connection/GeyserBedrockPingEvent.java | 2 +- .../lifecycle/GeyserDefineCommandsEvent.java | 2 +- .../GeyserDefineCustomBlocksEvent.java | 7 +- .../GeyserDefineCustomItemsEvent.java | 2 +- .../GeyserDefineCustomSkullsEvent.java | 2 +- .../InvalidDescriptionException.java | 6 + .../exception/InvalidExtensionException.java | 6 + .../geyser/api/util/CreativeCategory.java | 2 +- .../geysermc/geyser/api/util/TriState.java | 2 +- .../bungeecord/GeyserBungeeDumpInfo.java | 4 +- .../bungeecord/GeyserBungeeInjector.java | 3 +- .../GeyserBungeePingPassthrough.java | 3 +- .../bungeecord/GeyserBungeePlugin.java | 5 +- .../command/BungeeCommandSource.java | 3 +- .../platform/fabric/GeyserFabricMod.java | 6 +- .../fabric/command/FabricCommandSender.java | 7 +- .../command/GeyserFabricCommandExecutor.java | 6 +- .../mixin/client/IntegratedServerMixin.java | 3 + .../world/GeyserFabricWorldManager.java | 16 +- .../spigot/GeyserPaperPingPassthrough.java | 7 +- .../GeyserSpigotCompressionDisabler.java | 2 +- .../platform/spigot/GeyserSpigotDumpInfo.java | 1 + .../platform/spigot/GeyserSpigotInjector.java | 13 +- .../spigot/GeyserSpigotPingPassthrough.java | 9 +- .../platform/spigot/GeyserSpigotPlugin.java | 9 +- .../spigot/GeyserSpigotVersionChecker.java | 1 + .../platform/spigot/PaperAdventure.java | 8 +- .../platform/spigot/ReflectedNames.java | 13 +- .../command/GeyserPaperCommandListener.java | 2 +- .../command/GeyserSpigotCommandExecutor.java | 5 +- .../spigot/command/SpigotCommandSource.java | 6 +- .../GeyserSpigotLegacyNativeWorldManager.java | 2 + .../GeyserSpigotNativeWorldManager.java | 2 +- .../manager/GeyserSpigotWorldManager.java | 41 +++-- .../standalone/GeyserStandaloneBootstrap.java | 8 +- .../platform/standalone/gui/ColorPane.java | 9 +- .../standalone/gui/GeyserStandaloneGUI.java | 7 +- .../platform/standalone/gui/GraphPanel.java | 9 +- .../velocity/GeyserVelocityInjector.java | 3 +- .../velocity/GeyserVelocityPlugin.java | 8 +- .../command/VelocityCommandSource.java | 3 +- .../floodgate/crypto/AesKeyProducer.java | 2 +- .../floodgate/crypto/FloodgateCipher.java | 5 +- .../floodgate/crypto/KeyProducer.java | 2 +- .../org/geysermc/floodgate/news/NewsItem.java | 1 + .../floodgate/news/NewsItemAction.java | 4 +- .../floodgate/news/NewsItemMessage.java | 3 +- .../org/geysermc/floodgate/news/NewsType.java | 3 +- .../news/data/BuildSpecificData.java | 1 + .../news/data/ConfigSpecificData.java | 1 + .../geysermc/floodgate/util/BedrockData.java | 2 + .../util/InvalidFormatException.java | 3 + .../geysermc/floodgate/util/LinkedPlayer.java | 3 +- .../geysermc/floodgate/util/UiProfile.java | 4 +- .../floodgate/util/WebsocketEventType.java | 4 +- .../org/geysermc/geyser/GeyserBootstrap.java | 2 +- .../java/org/geysermc/geyser/GeyserImpl.java | 10 +- .../org/geysermc/geyser/GeyserLogger.java | 5 +- .../java/org/geysermc/geyser/GeyserMain.java | 5 +- .../geyser/command/GeyserCommand.java | 11 +- .../geyser/command/GeyserCommandExecutor.java | 2 +- .../geyser/command/GeyserCommandManager.java | 7 +- .../defaults/ConnectionTestCommand.java | 2 +- .../geyser/command/defaults/DumpCommand.java | 2 +- .../command/defaults/ExtensionsCommand.java | 2 +- .../command/defaults/VersionCommand.java | 7 +- .../configuration/GeyserConfiguration.java | 2 + .../GeyserJacksonConfiguration.java | 5 +- .../org/geysermc/geyser/dump/DumpInfo.java | 63 ++----- .../geyser/entity/EntityDefinition.java | 1 + .../entity/attribute/GeyserAttributeType.java | 3 +- .../entity/type/AreaEffectCloudEntity.java | 1 - .../geysermc/geyser/entity/type/Entity.java | 3 +- .../geyser/entity/type/LivingEntity.java | 3 +- .../geyser/entity/type/ThrowableEntity.java | 1 - .../type/living/AbstractFishEntity.java | 6 +- .../entity/type/living/AllayEntity.java | 10 +- .../entity/type/living/ArmorStandEntity.java | 4 +- .../entity/type/living/DolphinEntity.java | 10 +- .../entity/type/living/IronGolemEntity.java | 6 +- .../geyser/entity/type/living/MobEntity.java | 10 +- .../entity/type/living/SnowGolemEntity.java | 10 +- .../entity/type/living/TadpoleEntity.java | 10 +- .../type/living/animal/AnimalEntity.java | 10 +- .../type/living/animal/AxolotlEntity.java | 6 +- .../entity/type/living/animal/CowEntity.java | 10 +- .../entity/type/living/animal/GoatEntity.java | 6 +- .../type/living/animal/MooshroomEntity.java | 10 +- .../type/living/animal/OcelotEntity.java | 10 +- .../type/living/animal/PandaEntity.java | 12 +- .../entity/type/living/animal/PigEntity.java | 10 +- .../type/living/animal/SheepEntity.java | 10 +- .../type/living/animal/StriderEntity.java | 10 +- .../animal/horse/AbstractHorseEntity.java | 28 ++-- .../type/living/animal/horse/CamelEntity.java | 1 - .../animal/horse/ChestedHorseEntity.java | 8 +- .../animal/horse/SkeletonHorseEntity.java | 10 +- .../animal/horse/ZombieHorseEntity.java | 10 +- .../living/animal/tameable/CatEntity.java | 10 +- .../living/animal/tameable/ParrotEntity.java | 10 +- .../living/animal/tameable/WolfEntity.java | 10 +- .../merchant/AbstractMerchantEntity.java | 10 +- .../type/living/merchant/VillagerEntity.java | 4 +- .../type/living/monster/CreeperEntity.java | 10 +- .../type/living/monster/PiglinEntity.java | 12 +- .../living/monster/ZombieVillagerEntity.java | 10 +- .../entity/type/player/PlayerEntity.java | 5 +- .../type/player/SessionPlayerEntity.java | 6 +- .../AbstractGeyserboundPacketHandler.java | 2 +- .../GeyserboundHandshakePacketHandler.java | 4 +- .../erosion/UnixSocketClientListener.java | 5 +- .../geysermc/geyser/event/GeyserEventBus.java | 1 - .../geyser/event/GeyserEventSubscriber.java | 1 - .../type/GeyserBedrockPingEventImpl.java | 9 +- .../GeyserDefineCustomItemsEventImpl.java | 4 +- .../geyser/inventory/AnvilContainer.java | 3 +- .../geysermc/geyser/inventory/Container.java | 5 +- .../geyser/inventory/Generic3X3Container.java | 2 +- .../geyser/inventory/GeyserEnchantOption.java | 2 +- .../geyser/inventory/GeyserItemStack.java | 12 +- .../geysermc/geyser/inventory/Inventory.java | 4 +- .../geyser/inventory/PlayerInventory.java | 11 +- .../inventory/StonecutterContainer.java | 2 +- .../geyser/inventory/item/Enchantment.java | 7 +- .../geyser/inventory/item/Potion.java | 5 +- .../inventory/item/StoredItemMappings.java | 4 +- .../inventory/item/TippedArrowPotion.java | 9 +- .../updater/AnvilInventoryUpdater.java | 7 +- .../geyser/item/GeyserCustomItemOptions.java | 6 +- .../geyser/item/GeyserCustomMappingData.java | 1 - .../item/GeyserNonVanillaCustomItemData.java | 6 +- .../geyser/item/components/ToolTier.java | 11 -- .../InvalidCustomMappingsFileException.java | 12 +- .../geysermc/geyser/item/type/ArrowItem.java | 4 +- .../geyser/item/type/AxolotlBucketItem.java | 4 +- .../geysermc/geyser/item/type/BannerItem.java | 11 +- .../geyser/item/type/CompassItem.java | 5 +- .../geyser/item/type/CrossbowItem.java | 2 +- .../geyser/item/type/EnchantedBookItem.java | 3 +- .../geyser/item/type/FishingRodItem.java | 3 +- .../geyser/item/type/GoatHornItem.java | 3 +- .../org/geysermc/geyser/item/type/Item.java | 6 +- .../geysermc/geyser/item/type/MapItem.java | 5 +- .../geysermc/geyser/item/type/PotionItem.java | 3 +- .../geysermc/geyser/level/BedrockMapIcon.java | 3 +- .../geysermc/geyser/level/FireworkColor.java | 3 +- .../geyser/level/GeyserAdvancement.java | 4 +- .../geyser/level/GeyserWorldManager.java | 7 +- .../geysermc/geyser/level/WorldManager.java | 11 +- .../geyser/level/block/DoubleChestValue.java | 13 +- .../level/block/GeyserCustomBlockData.java | 6 +- .../level/block/GeyserCustomBlockState.java | 2 +- .../level/block/GeyserJavaBlockState.java | 12 +- .../level/chunk/bitarray/BitArrayVersion.java | 7 +- .../level/physics/CollisionManager.java | 3 +- .../geyser/level/physics/Direction.java | 8 +- .../geyser/level/physics/PistonBehavior.java | 4 +- .../geysermc/geyser/network/GameProtocol.java | 3 +- .../network/GeyserServerInitializer.java | 4 +- .../geyser/network/netty/ChannelWrapper.java | 3 +- .../network/netty/LocalChannelWrapper.java | 13 +- .../geyser/network/netty/LocalSession.java | 5 +- .../handler/RakConnectionRequestHandler.java | 2 +- .../netty/proxy/ProxyProtocolDecoder.java | 11 +- .../pack/GeyserResourcePackManifest.java | 4 +- .../geyser/pack/SkullResourcePackManager.java | 5 +- .../ping/GeyserLegacyPingPassthrough.java | 3 +- .../geyser/ping/IGeyserPingPassthrough.java | 2 +- .../registry/AbstractMappedRegistry.java | 2 +- .../geyser/registry/ArrayRegistry.java | 2 +- .../geyser/registry/BlockRegistries.java | 1 - .../geyser/registry/IntMappedRegistry.java | 2 +- .../geysermc/geyser/registry/Registry.java | 1 - .../geyser/registry/VersionedRegistry.java | 8 +- .../loader/AnnotatedRegistryLoader.java | 1 + .../loader/BiomeIdentifierRegistryLoader.java | 2 +- .../loader/CollisionRegistryLoader.java | 5 +- .../registry/loader/EffectRegistryLoader.java | 2 +- .../loader/EnchantmentRegistryLoader.java | 2 +- .../registry/loader/NbtRegistryLoader.java | 2 +- .../loader/PotionMixRegistryLoader.java | 3 +- .../registry/loader/SoundRegistryLoader.java | 2 +- .../mappings/MappingsConfigReader.java | 17 +- .../mappings/util/CustomBlockMapping.java | 6 +- .../mappings/versions/MappingsReader.java | 9 +- .../mappings/versions/MappingsReader_v1.java | 14 +- .../populator/BlockRegistryPopulator.java | 33 ++-- .../CreativeItemRegistryPopulator.java | 7 +- .../CustomBlockRegistryPopulator.java | 15 +- .../CustomItemRegistryPopulator.java | 30 ++-- .../CustomSkullRegistryPopulator.java | 9 +- .../populator/ItemRegistryPopulator.java | 4 +- .../populator/RecipeRegistryPopulator.java | 2 +- .../geyser/registry/type/BlockMapping.java | 10 +- .../geyser/registry/type/BlockMappings.java | 5 +- .../geyser/registry/type/ParticleMapping.java | 6 +- .../geysermc/geyser/scoreboard/Objective.java | 3 +- .../geyser/scoreboard/Scoreboard.java | 13 +- .../geyser/scoreboard/ScoreboardUpdater.java | 1 + .../org/geysermc/geyser/scoreboard/Team.java | 6 +- .../geyser/session/GeyserSession.java | 17 +- .../PendingMicrosoftAuthentication.java | 12 +- .../geyser/session/SessionManager.java | 5 +- .../session/cache/AdvancementsCache.java | 2 +- .../geyser/session/cache/BookEditCache.java | 2 +- .../geyser/session/cache/LodestoneCache.java | 6 +- .../session/cache/PreferencesCache.java | 4 +- .../geyser/session/cache/SkullCache.java | 3 +- .../geyser/session/cache/WorldBorder.java | 5 +- .../geyser/skin/FakeHeadProvider.java | 4 +- .../org/geysermc/geyser/skin/SkinManager.java | 4 +- .../geysermc/geyser/skin/SkinProvider.java | 35 ++-- .../geyser/text/AsteriskSerializer.java | 10 +- .../geysermc/geyser/text/ChatTypeEntry.java | 7 +- .../text/DummyLegacyHoverEventSerializer.java | 10 +- .../geysermc/geyser/text/GeyserLocale.java | 3 +- .../text/GsonComponentSerializerWrapper.java | 16 +- .../geysermc/geyser/text/MinecraftLocale.java | 5 +- .../text/MinecraftTranslationRegistry.java | 12 +- .../translator/collision/BlockCollision.java | 2 +- .../collision/SpawnerCollision.java | 38 ----- .../inventory/InventoryTranslator.java | 2 +- .../inventory/item/ItemTranslator.java | 22 ++- .../block/entity/BedrockOnlyBlockEntity.java | 3 +- .../ShulkerBoxBlockEntityTranslator.java | 3 +- .../entity/SkullBlockEntityTranslator.java | 3 +- ...BedrockInventoryTransactionTranslator.java | 6 +- .../BedrockItemFrameDropItemTranslator.java | 2 +- .../entity/BedrockEntityEventTranslator.java | 2 +- .../protocol/java/JavaCommandsTranslator.java | 2 +- .../java/JavaLoginDisconnectTranslator.java | 4 +- .../java/JavaUpdateRecipesTranslator.java | 1 + .../java/entity/JavaAnimateTranslator.java | 24 ++- .../entity/JavaTakeItemEntityTranslator.java | 1 - .../JavaPlayerCombatKillTranslator.java | 1 - .../level/JavaBlockDestructionTranslator.java | 1 - .../level/JavaLevelParticlesTranslator.java | 3 +- .../translator/sound/SoundTranslator.java | 2 +- .../ComparatorSoundInteractionTranslator.java | 1 - .../block/DoorSoundInteractionTranslator.java | 1 - .../LeverSoundInteractionTranslator.java | 1 - .../translator/text/MessageTranslator.java | 2 +- .../geysermc/geyser/util/AttributeUtils.java | 2 +- .../geyser/util/BlockEntityUtils.java | 4 +- .../org/geysermc/geyser/util/BlockUtils.java | 3 +- .../geysermc/geyser/util/CooldownUtils.java | 2 +- .../org/geysermc/geyser/util/CpuUtils.java | 6 +- .../org/geysermc/geyser/util/FileUtils.java | 6 +- .../geysermc/geyser/util/InventoryUtils.java | 14 +- .../org/geysermc/geyser/util/ItemUtils.java | 5 +- .../geysermc/geyser/util/JavaCodecUtil.java | 4 +- .../org/geysermc/geyser/util/Metrics.java | 154 ++---------------- .../org/geysermc/geyser/util/SignUtils.java | 2 - .../org/geysermc/geyser/util/SoundUtils.java | 3 +- .../geyser/util/VersionCheckUtils.java | 7 +- .../org/geysermc/geyser/util/WebUtils.java | 13 +- .../util/collection/FixedInt2BooleanMap.java | 6 + .../util/collection/FixedInt2ByteMap.java | 6 + .../util/collection/FixedInt2IntMap.java | 5 + .../util/collection/LecternHasBookMap.java | 5 + .../geyser/util/collection/package-info.java | 2 +- 270 files changed, 891 insertions(+), 977 deletions(-) delete mode 100644 core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index dac8a9a07..a483fbe95 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -19,32 +19,28 @@ public class LongClassName { public int nameWithMultipleWords = 0; /** - * Javadoc comment to explain what a function does. - */ + * Javadoc comment to explain what a function does. + */ @RandomAnnotation(stuff = true, moreStuff = "might exist") public void applyStuff() { Variable variable = new Variable(); Variable otherVariable = new Variable(); if (condition) { - // Do stuff. + // Do stuff. } else if (anotherCondition) { - // Do something else. + // Do something else. } switch (value) { - case 0: - stuff(); - break; - case 1: - differentStuff(); - break; + case 0 -> stuff(); + case 1 -> differentStuff(); } } } ``` -Make sure to comment your code where possible. +Make sure to comment your code where possible. To mark nullable methods, use `@Nullable` (and subsequently, `@NonNull`) from the `org.checkerframework.checker.nullness.qual` package. The nature of our software requires a lot of arrays and maps to be stored - where possible, use Fastutil's specialized maps. For example, if you're storing block state translations, use an `Int2IntMap`. diff --git a/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java index e1da50f25..6fcd5d888 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/ClassProcessor.java @@ -25,6 +25,8 @@ package org.geysermc.geyser.processor; +import org.checkerframework.checker.nullness.qual.Nullable; + import javax.annotation.processing.AbstractProcessor; import javax.annotation.processing.ProcessingEnvironment; import javax.annotation.processing.RoundEnvironment; @@ -159,7 +161,7 @@ public class ClassProcessor extends AbstractProcessor { this.processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Completed processing for " + this.annotationClassName); } - private BufferedReader createReader() throws IOException { + private @Nullable BufferedReader createReader() throws IOException { if (this.outputPath != null) { this.processingEnv.getMessager().printMessage(Diagnostic.Kind.NOTE, "Reading existing " + this.annotationClassName + " list from " + this.outputPath); return Files.newBufferedReader(this.outputPath); diff --git a/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java b/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java index de5c78678..0d6007c1c 100644 --- a/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java +++ b/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java @@ -77,6 +77,7 @@ public interface GeyserApi extends GeyserApiBase { * @param apiClass the builder class * @param the implementation type * @param the API type + * @throws IllegalArgumentException if there is no provider for the specified API class * @return the builder instance */ @NonNull diff --git a/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraShake.java b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraShake.java index 18bafb428..67b56b1f5 100644 --- a/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraShake.java +++ b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraShake.java @@ -27,5 +27,5 @@ package org.geysermc.geyser.api.bedrock.camera; public enum CameraShake { POSITIONAL, - ROTATIONAL; + ROTATIONAL } diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java index d06d9a967..e274fd8bd 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/component/PlacementConditions.java @@ -25,11 +25,11 @@ package org.geysermc.geyser.api.block.custom.component; +import org.checkerframework.checker.nullness.qual.NonNull; + import java.util.LinkedHashMap; import java.util.Set; -import org.checkerframework.checker.nullness.qual.NonNull; - /** * This class is used to store conditions for a placement filter for a custom block. * @@ -43,7 +43,7 @@ public record PlacementConditions(@NonNull Set allowedFaces, @NonNull Link NORTH, SOUTH, WEST, - EAST; + EAST } public enum BlockFilterType { diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java index 6293506a8..f7da4b932 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBlockState.java @@ -39,7 +39,7 @@ public interface JavaBlockState { * * @return whether the block state is waterlogged */ - @NonNull boolean waterlogged(); + boolean waterlogged(); /** * Gets the collision of the block state @@ -53,7 +53,7 @@ public interface JavaBlockState { * * @return whether the block state can be broken with hand */ - @NonNull boolean canBreakWithHand(); + boolean canBreakWithHand(); /** * Gets the pick item of the block state @@ -74,7 +74,7 @@ public interface JavaBlockState { * * @return whether the block state has block entity */ - @Nullable boolean hasBlockEntity(); + boolean hasBlockEntity(); /** * Creates a new {@link JavaBlockState.Builder} instance @@ -94,17 +94,17 @@ public interface JavaBlockState { Builder blockHardness(@NonNegative float blockHardness); - Builder waterlogged(@NonNull boolean waterlogged); + Builder waterlogged(boolean waterlogged); Builder collision(@NonNull JavaBoundingBox[] collision); - Builder canBreakWithHand(@NonNull boolean canBreakWithHand); + Builder canBreakWithHand(boolean canBreakWithHand); Builder pickItem(@Nullable String pickItem); Builder pistonBehavior(@Nullable String pistonBehavior); - Builder hasBlockEntity(@Nullable boolean hasBlockEntity); + Builder hasBlockEntity(boolean hasBlockEntity); JavaBlockState build(); } diff --git a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBoundingBox.java b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBoundingBox.java index 56a4ca3da..9065e8711 100644 --- a/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBoundingBox.java +++ b/api/src/main/java/org/geysermc/geyser/api/block/custom/nonvanilla/JavaBoundingBox.java @@ -1,6 +1,4 @@ package org.geysermc.geyser.api.block.custom.nonvanilla; -import org.checkerframework.checker.nullness.qual.NonNull; - -public record JavaBoundingBox(@NonNull double middleX, @NonNull double middleY, @NonNull double middleZ, @NonNull double sizeX, @NonNull double sizeY, @NonNull double sizeZ) { +public record JavaBoundingBox(double middleX, double middleY, double middleZ, double sizeX, double sizeY, double sizeZ) { } diff --git a/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java b/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java index 801bfa45f..3344e38f4 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/EventBus.java @@ -28,7 +28,6 @@ package org.geysermc.geyser.api.event; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.event.Event; import org.geysermc.event.bus.OwnedEventBus; -import org.geysermc.geyser.api.extension.Extension; import java.util.Set; diff --git a/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java b/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java index 7f91d09a3..258ef9164 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/EventSubscriber.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.api.event; import org.geysermc.event.Event; import org.geysermc.event.subscribe.OwnedSubscriber; -import org.geysermc.geyser.api.extension.Extension; /** * Represents a subscribed listener to a {@link Event}. Wraps around diff --git a/api/src/main/java/org/geysermc/geyser/api/event/connection/GeyserBedrockPingEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/connection/GeyserBedrockPingEvent.java index 67a81ac58..10ccb93d5 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/connection/GeyserBedrockPingEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/connection/GeyserBedrockPingEvent.java @@ -34,7 +34,7 @@ import java.net.InetSocketAddress; /** * Called whenever Geyser gets pinged - * + *

* This event allows you to modify/obtain the MOTD, maximum player count, and current number of players online, * Geyser will reply to the client with what was given. */ diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java index 77d5efa65..994373752 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCommandsEvent.java @@ -33,7 +33,7 @@ import java.util.Map; /** * Called when commands are defined within Geyser. - * + *

* This event allows you to register new commands using the {@link #register(Command)} * method and retrieve the default commands defined. */ diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java index b1a01d7e6..a105578d9 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomBlocksEvent.java @@ -28,13 +28,12 @@ package org.geysermc.geyser.api.event.lifecycle; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockItem; import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.event.Event; /** * Called on Geyser's startup when looking for custom blocks. Custom blocks must be registered through this event. - * + *

* This event will not be called if the "add-non-bedrock-items" setting is disabled in the Geyser config. */ public abstract class GeyserDefineCustomBlocksEvent implements Event { @@ -48,8 +47,8 @@ public abstract class GeyserDefineCustomBlocksEvent implements Event { /** * Registers the given {@link CustomBlockState} as an override for the * given java state identifier - * Java state identifiers are listed in - * https://raw.githubusercontent.com/GeyserMC/mappings/master/blocks.json + * Java state identifiers are listed + * here * * @param javaIdentifier the java state identifier to override * @param customBlockState the custom block state with which to override java state identifier diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java index 0957b8551..bd14aaf43 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomItemsEvent.java @@ -36,7 +36,7 @@ import java.util.Map; /** * Called on Geyser's startup when looking for custom items. Custom items must be registered through this event. - * + *

* This event will not be called if the "add non-Bedrock items" setting is disabled in the Geyser config. */ public interface GeyserDefineCustomItemsEvent extends Event { diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java index 17f7b599a..6443bbeb3 100644 --- a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserDefineCustomSkullsEvent.java @@ -5,7 +5,7 @@ import org.geysermc.event.Event; /** * Called on Geyser's startup when looking for custom skulls. Custom skulls must be registered through this event. - * + *

* This event will not be called if the "add-non-bedrock-items" setting is disabled in the Geyser config. */ public abstract class GeyserDefineCustomSkullsEvent implements Event { diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java index 1fe88e9e9..5313c1f40 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidDescriptionException.java @@ -25,10 +25,16 @@ package org.geysermc.geyser.api.extension.exception; +import java.io.Serial; + /** * Thrown when an extension's description is invalid. */ public class InvalidDescriptionException extends Exception { + + @Serial + private static final long serialVersionUID = 1L; + public InvalidDescriptionException(Throwable cause) { super(cause); } diff --git a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java index 7fb6b6922..89780fe46 100644 --- a/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java +++ b/api/src/main/java/org/geysermc/geyser/api/extension/exception/InvalidExtensionException.java @@ -25,10 +25,16 @@ package org.geysermc.geyser.api.extension.exception; +import java.io.Serial; + /** * Thrown when an extension is invalid. */ public class InvalidExtensionException extends Exception { + + @Serial + private static final long serialVersionUID = 1L; + public InvalidExtensionException(Throwable cause) { super(cause); } diff --git a/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java b/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java index 7519ff157..207320b1e 100644 --- a/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java +++ b/api/src/main/java/org/geysermc/geyser/api/util/CreativeCategory.java @@ -51,7 +51,7 @@ public enum CreativeCategory { * * @return the name of the category */ - @NonNull public String internalName() { + public @NonNull String internalName() { return internalName; } diff --git a/api/src/main/java/org/geysermc/geyser/api/util/TriState.java b/api/src/main/java/org/geysermc/geyser/api/util/TriState.java index 457a38e32..a8bb723d6 100644 --- a/api/src/main/java/org/geysermc/geyser/api/util/TriState.java +++ b/api/src/main/java/org/geysermc/geyser/api/util/TriState.java @@ -30,7 +30,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; /** * This is a way to represent a boolean, but with a non set value added. - * This class was inspired by adventure's version https://github.com/KyoriPowered/adventure/blob/main/4/api/src/main/java/net/kyori/adventure/util/TriState.java + * This class was inspired by adventure's TriState */ public enum TriState { /** diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java index ba7bc464f..85abd285b 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeDumpInfo.java @@ -30,6 +30,7 @@ import net.md_5.bungee.api.ProxyServer; import net.md_5.bungee.api.plugin.Plugin; import org.geysermc.geyser.dump.BootstrapDumpInfo; +import java.net.InetSocketAddress; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -51,7 +52,8 @@ public class GeyserBungeeDumpInfo extends BootstrapDumpInfo { this.plugins = new ArrayList<>(); for (net.md_5.bungee.api.config.ListenerInfo listener : proxy.getConfig().getListeners()) { - this.listeners.add(new ListenerInfo(listener.getHost().getHostString(), listener.getHost().getPort())); + InetSocketAddress address = (InetSocketAddress) listener.getSocketAddress(); + this.listeners.add(new ListenerInfo(address.getHostString(), address.getPort())); } for (Plugin plugin : proxy.getPluginManager().getPlugins()) { diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java index e10b3ce6f..7c60ba95d 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeeInjector.java @@ -39,6 +39,7 @@ import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.event.EventHandler; import net.md_5.bungee.netty.PipelineUtils; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.network.netty.GeyserInjector; @@ -125,7 +126,7 @@ public class GeyserBungeeInjector extends GeyserInjector implements Listener { .channel(LocalServerChannelWrapper.class) .childHandler(new ChannelInitializer<>() { @Override - protected void initChannel(Channel ch) throws Exception { + protected void initChannel(@NonNull Channel ch) throws Exception { if (proxy.getConfig().getServers() == null) { // Proxy hasn't finished loading all plugins - it loads the config after all plugins // Probably doesn't need to be translatable? diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java index e14e8ff66..3c3853ed8 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePingPassthrough.java @@ -35,6 +35,7 @@ import net.md_5.bungee.api.connection.PendingConnection; import net.md_5.bungee.api.event.ProxyPingEvent; import net.md_5.bungee.api.plugin.Listener; import net.md_5.bungee.protocol.ProtocolConstants; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.ping.GeyserPingInfo; import org.geysermc.geyser.ping.IGeyserPingPassthrough; @@ -104,7 +105,7 @@ public class GeyserBungeePingPassthrough implements IGeyserPingPassthrough, List } @Override - public InetSocketAddress getVirtualHost() { + public @Nullable InetSocketAddress getVirtualHost() { return null; } diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java index e58abc3b4..c4eea66b8 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java @@ -30,6 +30,7 @@ import net.md_5.bungee.BungeeCord; import net.md_5.bungee.api.config.ListenerInfo; import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.protocol.ProtocolConstants; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.GeyserBootstrap; @@ -44,7 +45,6 @@ import org.geysermc.geyser.ping.IGeyserPingPassthrough; import org.geysermc.geyser.platform.bungeecord.command.GeyserBungeeCommandExecutor; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.FileUtils; -import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; @@ -72,6 +72,7 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { private static boolean INITIALIZED = false; + @SuppressWarnings({"JavaReflectionMemberAccess", "ResultOfMethodCallIgnored"}) @Override public void onLoad() { GeyserLocale.init(this); @@ -251,7 +252,7 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { return this.geyserInjector.getServerSocketAddress(); } - @NotNull + @NonNull @Override public String getServerBindAddress() { return findCompatibleListener().map(InetSocketAddress::getHostString).orElse(""); diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java index f65377643..e3099f170 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/command/BungeeCommandSource.java @@ -29,6 +29,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; import net.md_5.bungee.api.chat.TextComponent; import net.md_5.bungee.api.connection.ProxiedPlayer; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.text.GeyserLocale; @@ -50,7 +51,7 @@ public class BungeeCommandSource implements GeyserCommandSource { } @Override - public void sendMessage(String message) { + public void sendMessage(@NonNull String message) { handle.sendMessage(TextComponent.fromLegacyText(message)); } diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java index af0c9efca..071409046 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java @@ -37,6 +37,8 @@ import net.minecraft.commands.CommandSourceStack; import net.minecraft.commands.Commands; import net.minecraft.server.MinecraftServer; import org.apache.logging.log4j.LogManager; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; @@ -54,8 +56,6 @@ import org.geysermc.geyser.platform.fabric.command.GeyserFabricCommandExecutor; import org.geysermc.geyser.platform.fabric.world.GeyserFabricWorldManager; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.FileUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.io.File; import java.io.IOException; @@ -251,7 +251,7 @@ public class GeyserFabricMod implements ModInitializer, GeyserBootstrap { return this.server.getServerVersion(); } - @NotNull + @NonNull @Override public String getServerBindAddress() { String ip = this.server.getLocalIp(); diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java index 6517ac133..28875ec6e 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/FabricCommandSender.java @@ -30,11 +30,12 @@ import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; import net.minecraft.commands.CommandSourceStack; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.text.ChatColor; -import javax.annotation.Nonnull; +import java.util.Objects; public class FabricCommandSender implements GeyserCommandSource { @@ -50,7 +51,7 @@ public class FabricCommandSender implements GeyserCommandSource { } @Override - public void sendMessage(@Nonnull String message) { + public void sendMessage(@NonNull String message) { if (source.getEntity() instanceof ServerPlayer) { ((ServerPlayer) source.getEntity()).displayClientMessage(Component.literal(message), false); } else { @@ -62,7 +63,7 @@ public class FabricCommandSender implements GeyserCommandSource { public void sendMessage(net.kyori.adventure.text.Component message) { if (source.getEntity() instanceof ServerPlayer player) { String decoded = GsonComponentSerializer.gson().serialize(message); - player.displayClientMessage(Component.Serializer.fromJson(decoded), false); + player.displayClientMessage(Objects.requireNonNull(Component.Serializer.fromJson(decoded)), false); return; } GeyserCommandSource.super.sendMessage(message); diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java index 8da7c8512..732b28ca7 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java @@ -52,12 +52,12 @@ public class GeyserFabricCommandExecutor extends GeyserCommandExecutor implement } @Override - public int run(CommandContext context) { + public int run(CommandContext context) { return runWithArgs(context, ""); } - public int runWithArgs(CommandContext context, String args) { - CommandSourceStack source = (CommandSourceStack) context.getSource(); + public int runWithArgs(CommandContext context, String args) { + CommandSourceStack source = context.getSource(); FabricCommandSender sender = new FabricCommandSender(source); GeyserSession session = getGeyserSession(sender); if (!testPermission(source)) { diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java index 942909068..f11d3a1ae 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java @@ -42,6 +42,8 @@ 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.Objects; + @Environment(EnvType.CLIENT) @Mixin(IntegratedServer.class) public class IntegratedServerMixin implements GeyserServerPortGetter { @@ -58,6 +60,7 @@ public class IntegratedServerMixin implements GeyserServerPortGetter { // Ensure player locale has been loaded, in case it's different from Java system language GeyserLocale.loadGeyserLocale(this.minecraft.options.languageCode); // Give indication that Geyser is loaded + Objects.requireNonNull(this.minecraft.player); this.minecraft.player.displayClientMessage(Component.literal(GeyserLocale.getPlayerLocaleString("geyser.core.start", this.minecraft.options.languageCode, "localhost", String.valueOf(this.publishedPort))), false); } diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java index 923db9b25..9d7b81831 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/world/GeyserFabricWorldManager.java @@ -39,6 +39,7 @@ import net.minecraft.world.level.block.entity.BannerBlockEntity; import net.minecraft.world.level.block.entity.BlockEntity; import net.minecraft.world.level.block.entity.LecternBlockEntity; import net.minecraft.world.level.chunk.LevelChunk; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -48,9 +49,9 @@ import org.geysermc.geyser.level.GeyserWorldManager; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.BlockEntityUtils; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; +import java.util.Objects; import java.util.concurrent.CompletableFuture; public class GeyserFabricWorldManager extends GeyserWorldManager { @@ -73,9 +74,11 @@ public class GeyserFabricWorldManager extends GeyserWorldManager { return; } + //noinspection resource - level() is just a getter LevelChunk chunk = player.level().getChunk(x, z); final int chunkBlockX = x << 4; final int chunkBlockZ = z << 4; + //noinspection ForLoopReplaceableByForEach - avoid constructing iterator for (int i = 0; i < blockEntityInfos.size(); i++) { BlockEntityInfo blockEntityInfo = blockEntityInfos.get(i); BlockEntity blockEntity = chunk.getBlockEntity(new BlockPos(chunkBlockX + blockEntityInfo.getX(), @@ -92,7 +95,7 @@ public class GeyserFabricWorldManager extends GeyserWorldManager { if (player == null) { return; } - + //noinspection resource - level() is just a getter BlockEntity blockEntity = player.level().getBlockEntity(new BlockPos(x, y, z)); sendLecternData(session, blockEntity, false); }); @@ -159,7 +162,7 @@ public class GeyserFabricWorldManager extends GeyserWorldManager { return GameMode.byId(server.getDefaultGameType().getId()); } - @Nonnull + @NonNull @Override public CompletableFuture getPickItemNbt(GeyserSession session, int x, int y, int z, boolean addNbtData) { CompletableFuture future = new CompletableFuture<>(); @@ -172,6 +175,7 @@ public class GeyserFabricWorldManager extends GeyserWorldManager { BlockPos pos = new BlockPos(x, y, z); // Don't create a new block entity if invalid + //noinspection resource - level() is just a getter BlockEntity blockEntity = player.level().getChunkAt(pos).getBlockEntity(pos); if (blockEntity instanceof BannerBlockEntity banner) { // Potentially exposes other NBT data? But we need to get the NBT data for the banner patterns *and* @@ -263,7 +267,7 @@ public class GeyserFabricWorldManager extends GeyserWorldManager { } @Override - public void visitCompound(CompoundTag compoundTag) { + public void visitCompound(@NonNull CompoundTag compoundTag) { currentTag = convert(currentKey, compoundTag); } @@ -271,7 +275,7 @@ public class GeyserFabricWorldManager extends GeyserWorldManager { OpenNbtTagVisitor visitor = new OpenNbtTagVisitor(name); for (String key : compoundTag.getAllKeys()) { visitor.currentKey = key; - Tag tag = compoundTag.get(key); + Tag tag = Objects.requireNonNull(compoundTag.get(key)); tag.accept(visitor); visitor.root.put(visitor.currentTag); } @@ -279,7 +283,7 @@ public class GeyserFabricWorldManager extends GeyserWorldManager { } @Override - public void visitEnd(EndTag endTag) { + public void visitEnd(@NonNull EndTag endTag) { } } } diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java index 60e0ae519..6a962f450 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserPaperPingPassthrough.java @@ -28,11 +28,11 @@ package org.geysermc.geyser.platform.spigot; import com.destroystokyo.paper.event.server.PaperServerListPingEvent; import com.destroystokyo.paper.network.StatusClient; import org.bukkit.Bukkit; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.ping.GeyserPingInfo; import org.geysermc.geyser.ping.IGeyserPingPassthrough; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.lang.reflect.Constructor; import java.net.InetSocketAddress; @@ -50,6 +50,7 @@ public final class GeyserPaperPingPassthrough implements IGeyserPingPassthrough this.logger = logger; } + @SuppressWarnings("deprecation") @Nullable @Override public GeyserPingInfo getPingInformation(InetSocketAddress inetSocketAddress) { @@ -89,7 +90,7 @@ public final class GeyserPaperPingPassthrough implements IGeyserPingPassthrough private record GeyserStatusClient(InetSocketAddress address) implements StatusClient { @Override - public @NotNull InetSocketAddress getAddress() { + public @NonNull InetSocketAddress getAddress() { return address; } diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java index 9b112f62f..2a6056df9 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotCompressionDisabler.java @@ -34,7 +34,7 @@ import org.geysermc.geyser.GeyserImpl; /** * Disables the compression packet (and the compression handlers from being added to the pipeline) for Geyser clients * that won't be receiving the data over the network. - * + *

* As of 1.8 - 1.17.1, compression is enabled in the Netty pipeline by adding a listener after a packet is written. * If we simply "cancel" or don't forward the packet, then the listener is never called. */ diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java index d340935b3..329663709 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotDumpInfo.java @@ -47,6 +47,7 @@ public class GeyserSpigotDumpInfo extends BootstrapDumpInfo { private final int serverPort; private final List plugins; + @SuppressWarnings("deprecation") GeyserSpigotDumpInfo() { super(); this.platformName = Bukkit.getName(); diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java index e3d73fb19..01bc0bea4 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java @@ -32,6 +32,7 @@ import io.netty.channel.*; import io.netty.channel.local.LocalAddress; import io.netty.util.concurrent.DefaultThreadFactory; import org.bukkit.Bukkit; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.network.netty.GeyserInjector; import org.geysermc.geyser.network.netty.LocalServerChannelWrapper; @@ -74,12 +75,10 @@ public class GeyserSpigotInjector extends GeyserInjector { Object connection = null; // Find the class that manages network IO for (Method m : serverClazz.getDeclaredMethods()) { - if (m.getReturnType() != null) { - // First is Spigot-mapped name, second is Mojang-mapped name which is implemented as future-proofing - if (m.getReturnType().getSimpleName().equals("ServerConnection") || m.getReturnType().getSimpleName().equals("ServerConnectionListener")) { - if (m.getParameterTypes().length == 0) { - connection = m.invoke(server); - } + // First is Spigot-mapped name, second is Mojang-mapped name which is implemented as future-proofing + if (m.getReturnType().getSimpleName().equals("ServerConnection") || m.getReturnType().getSimpleName().equals("ServerConnectionListener")) { + if (m.getParameterTypes().length == 0) { + connection = m.invoke(server); } } } @@ -117,7 +116,7 @@ public class GeyserSpigotInjector extends GeyserInjector { .channel(LocalServerChannelWrapper.class) .childHandler(new ChannelInitializer<>() { @Override - protected void initChannel(Channel ch) throws Exception { + protected void initChannel(@NonNull Channel ch) throws Exception { initChannel.invoke(childHandler, ch); if (bootstrap.getGeyserConfig().isDisableCompression() && GeyserSpigotCompressionDisabler.ENABLED) { diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java index df197f137..4b1e42871 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPingPassthrough.java @@ -30,10 +30,12 @@ import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.event.server.ServerListPingEvent; import org.bukkit.util.CachedServerIcon; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.ping.GeyserPingInfo; import org.geysermc.geyser.ping.IGeyserPingPassthrough; -import javax.annotation.Nonnull; import java.net.InetAddress; import java.net.InetSocketAddress; import java.util.Collections; @@ -44,8 +46,9 @@ public class GeyserSpigotPingPassthrough implements IGeyserPingPassthrough { private final GeyserSpigotLogger logger; + @SuppressWarnings("deprecation") @Override - public GeyserPingInfo getPingInformation(InetSocketAddress inetSocketAddress) { + public @Nullable GeyserPingInfo getPingInformation(InetSocketAddress inetSocketAddress) { try { ServerListPingEvent event = new GeyserPingEvent(inetSocketAddress.getAddress(), Bukkit.getMotd(), Bukkit.getOnlinePlayers().size(), Bukkit.getMaxPlayers()); Bukkit.getPluginManager().callEvent(event); @@ -67,7 +70,7 @@ public class GeyserSpigotPingPassthrough implements IGeyserPingPassthrough { public void setServerIcon(CachedServerIcon icon) throws IllegalArgumentException, UnsupportedOperationException { } - @Nonnull + @NonNull @Override public Iterator iterator() throws UnsupportedOperationException { return Collections.emptyIterator(); diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java index cfb6ff5ae..02ea91cf2 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java @@ -42,13 +42,14 @@ import org.bukkit.permissions.Permission; import org.bukkit.permissions.PermissionDefault; import org.bukkit.plugin.Plugin; import org.bukkit.plugin.java.JavaPlugin; -import org.geysermc.geyser.api.util.PlatformType; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.adapters.spigot.SpigotAdapters; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.api.extension.Extension; +import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommandManager; import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.dump.BootstrapDumpInfo; @@ -66,7 +67,6 @@ import org.geysermc.geyser.platform.spigot.world.manager.GeyserSpigotNativeWorld import org.geysermc.geyser.platform.spigot.world.manager.GeyserSpigotWorldManager; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.FileUtils; -import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; @@ -76,6 +76,7 @@ import java.net.SocketAddress; import java.nio.file.Path; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.UUID; import java.util.logging.Level; @@ -137,6 +138,7 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { // This is manually done instead of using Bukkit methods to save the config because otherwise comments get removed try { if (!getDataFolder().exists()) { + //noinspection ResultOfMethodCallIgnored getDataFolder().mkdir(); } File configFile = FileUtils.fileOrCopiedFromResource(new File(getDataFolder(), "config.yml"), "config.yml", @@ -272,6 +274,7 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { } PluginCommand geyserCommand = this.getCommand("geyser"); + Objects.requireNonNull(geyserCommand, "base command cannot be null"); geyserCommand.setExecutor(new GeyserSpigotCommandExecutor(geyser, geyserCommandManager.getCommands())); for (Map.Entry> entry : this.geyserCommandManager.extensionCommands().entrySet()) { @@ -437,7 +440,7 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { return false; } - @NotNull + @NonNull @Override public String getServerBindAddress() { return Bukkit.getIp(); diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java index 0212ff9b0..057304357 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotVersionChecker.java @@ -39,6 +39,7 @@ import java.lang.reflect.Modifier; public final class GeyserSpigotVersionChecker { private static final String VIAVERSION_DOWNLOAD_URL = "https://ci.viaversion.com/job/ViaVersion/"; + @SuppressWarnings("deprecation") public static void checkForSupportedProtocol(GeyserLogger logger, boolean viaversion) { if (viaversion) { checkViaVersionSupportedVersions(logger); diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java index 5dd16da33..9e0b14b11 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/PaperAdventure.java @@ -28,8 +28,8 @@ package org.geysermc.geyser.platform.spigot; import com.github.steveice10.mc.protocol.data.DefaultComponentSerializer; import net.kyori.adventure.text.Component; import org.bukkit.command.CommandSender; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; -import org.jetbrains.annotations.Nullable; import java.lang.invoke.MethodHandle; import java.lang.invoke.MethodHandles; @@ -39,8 +39,8 @@ import java.lang.reflect.Method; /** * Utility class for converting our shaded Adventure into the Adventure bundled in Paper. - * - * Code mostly taken from https://github.com/KyoriPowered/adventure-platform/blob/94d5821f2e755170f42bd8a5fe1d5bf6f66d04ad/platform-bukkit/src/main/java/net/kyori/adventure/platform/bukkit/PaperFacet.java#L46 + *

+ * Code mostly taken from here * and the MinecraftReflection class. */ public final class PaperAdventure { @@ -102,7 +102,7 @@ public final class PaperAdventure { SEND_MESSAGE_COMPONENT = playerComponentSendMessage; } - public static Object toNativeComponent(final Component component) { + public static @Nullable Object toNativeComponent(final Component component) { if (NATIVE_GSON_COMPONENT_SERIALIZER_DESERIALIZE_METHOD_BOUND == null) { GeyserImpl.getInstance().getLogger().error("Illegal state where Component serialization was called when it wasn't available!"); return null; diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java index 67e31fea2..275fec657 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/ReflectedNames.java @@ -29,8 +29,8 @@ import com.destroystokyo.paper.event.server.PaperServerListPingEvent; import com.destroystokyo.paper.network.StatusClient; import org.bukkit.event.server.ServerListPingEvent; import org.bukkit.util.CachedServerIcon; +import org.checkerframework.checker.nullness.qual.Nullable; -import javax.annotation.Nullable; import java.lang.reflect.Constructor; import java.net.InetAddress; @@ -40,15 +40,8 @@ import java.net.InetAddress; public final class ReflectedNames { static boolean checkPaperPingEvent() { - return classExists("com.destroystokyo.paper.event.server.PaperServerListPingEvent"); - } - - /** - * @return if this class name exists - */ - private static boolean classExists(String clazz) { try { - Class.forName(clazz); + Class.forName("com.destroystokyo.paper.event.server.PaperServerListPingEvent"); return true; } catch (ClassNotFoundException e) { return false; @@ -59,7 +52,7 @@ public final class ReflectedNames { return getConstructor(ServerListPingEvent.class, InetAddress.class, String.class, boolean.class, int.class, int.class) != null; } - static Constructor getOldPaperPingConstructor() { + static @Nullable Constructor getOldPaperPingConstructor() { if (getConstructor(PaperServerListPingEvent.class, StatusClient.class, String.class, int.class, int.class, String.class, int.class, CachedServerIcon.class) != null) { // @NotNull StatusClient client, @NotNull String motd, int numPlayers, int maxPlayers, diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java index 9375e3a62..dcec045ab 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserPaperCommandListener.java @@ -39,8 +39,8 @@ import java.util.Map; public final class GeyserPaperCommandListener implements Listener { + @SuppressWarnings("UnstableApiUsage") @EventHandler - @SuppressWarnings("deprecation") // Used to indicate an unstable event public void onCommandSend(AsyncPlayerSendCommandsEvent event) { // Documentation says to check (event.isAsynchronous() || !event.hasFiredAsync()), but as of Paper 1.18.2 // event.hasFiredAsync is never true diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java index 61d394214..6780bde17 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/GeyserSpigotCommandExecutor.java @@ -29,6 +29,7 @@ import org.bukkit.ChatColor; import org.bukkit.command.Command; import org.bukkit.command.CommandSender; import org.bukkit.command.TabExecutor; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.command.GeyserCommand; import org.geysermc.geyser.command.GeyserCommandExecutor; @@ -47,7 +48,7 @@ public class GeyserSpigotCommandExecutor extends GeyserCommandExecutor implement } @Override - public boolean onCommand(CommandSender sender, Command command, String label, String[] args) { + public boolean onCommand(@NonNull CommandSender sender, @NonNull Command command, @NonNull String label, String[] args) { SpigotCommandSource commandSender = new SpigotCommandSource(sender); GeyserSession session = getGeyserSession(commandSender); @@ -78,7 +79,7 @@ public class GeyserSpigotCommandExecutor extends GeyserCommandExecutor implement } @Override - public List onTabComplete(CommandSender sender, Command command, String label, String[] args) { + public List onTabComplete(@NonNull CommandSender sender, @NonNull Command command, @NonNull String label, String[] args) { if (args.length == 1) { return tabComplete(new SpigotCommandSource(sender)); } diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java index 95fba707f..365e9ad17 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/command/SpigotCommandSource.java @@ -29,6 +29,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.bungeecord.BungeeComponentSerializer; import org.bukkit.command.ConsoleCommandSender; import org.bukkit.entity.Player; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.platform.spigot.PaperAdventure; import org.geysermc.geyser.text.GeyserLocale; @@ -48,10 +49,11 @@ public class SpigotCommandSource implements GeyserCommandSource { } @Override - public void sendMessage(String message) { + public void sendMessage(@NonNull String message) { handle.sendMessage(message); } + @SuppressWarnings("deprecation") @Override public void sendMessage(Component message) { if (PaperAdventure.canSendMessageUsingComponent()) { @@ -68,9 +70,11 @@ public class SpigotCommandSource implements GeyserCommandSource { return handle instanceof ConsoleCommandSender; } + @SuppressWarnings("deprecation") @Override public String locale() { if (this.handle instanceof Player player) { + // getLocale() is deprecated on Paper, but not on Spigot return player.getLocale(); } diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java index baffc9679..021db5ec1 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotLegacyNativeWorldManager.java @@ -37,6 +37,7 @@ import org.geysermc.geyser.platform.spigot.GeyserSpigotPlugin; import org.geysermc.geyser.session.GeyserSession; import java.util.List; +import java.util.Objects; /** * Used when block IDs need to be translated to the latest version @@ -52,6 +53,7 @@ public class GeyserSpigotLegacyNativeWorldManager extends GeyserSpigotNativeWorl ProtocolVersion serverVersion = plugin.getServerProtocolVersion(); List protocolList = Via.getManager().getProtocolManager().getProtocolPath(GameProtocol.getJavaProtocolVersion(), serverVersion.getVersion()); + Objects.requireNonNull(protocolList, "protocolList cannot be null"); for (int oldBlockId : allBlockStates) { int newBlockId = oldBlockId; // protocolList should *not* be null; we checked for that before initializing this class diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java index 6b5d1ea1e..00212663c 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotNativeWorldManager.java @@ -28,11 +28,11 @@ package org.geysermc.geyser.platform.spigot.world.manager; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.adapters.spigot.SpigotAdapters; import org.geysermc.geyser.adapters.spigot.SpigotWorldAdapter; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.session.GeyserSession; -import org.jetbrains.annotations.Nullable; public class GeyserSpigotNativeWorldManager extends GeyserSpigotWorldManager { protected final SpigotWorldAdapter adapter; diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java index c8ccfffd7..74f359e02 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java @@ -34,21 +34,23 @@ import org.bukkit.World; import org.bukkit.block.Block; import org.bukkit.entity.Player; import org.bukkit.plugin.Plugin; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.geysermc.erosion.bukkit.BukkitLecterns; import org.geysermc.erosion.bukkit.BukkitUtils; import org.geysermc.erosion.bukkit.PickBlockUtils; import org.geysermc.erosion.bukkit.SchedulerUtils; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.level.GameRule; import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.BlockEntityUtils; -import org.jetbrains.annotations.Nullable; -import javax.annotation.Nonnull; import java.util.List; +import java.util.Objects; import java.util.concurrent.CompletableFuture; /** @@ -128,7 +130,7 @@ public class GeyserSpigotWorldManager extends WorldManager { } } - private Chunk getChunk(World world, int x, int z) { + private @Nullable Chunk getChunk(World world, int x, int z) { if (!world.isChunkLoaded(x, z)) { return null; } @@ -136,6 +138,7 @@ public class GeyserSpigotWorldManager extends WorldManager { } private void sendLecternData(GeyserSession session, Chunk chunk, List blockEntityInfos) { + //noinspection ForLoopReplaceableByForEach - avoid constructing Iterator for (int i = 0; i < blockEntityInfos.size(); i++) { BlockEntityInfo info = blockEntityInfos.get(i); Block block = chunk.getBlock(info.getX(), info.getY(), info.getZ()); @@ -156,19 +159,34 @@ public class GeyserSpigotWorldManager extends WorldManager { } public boolean getGameRuleBool(GeyserSession session, GameRule gameRule) { - String value = Bukkit.getPlayer(session.getPlayerEntity().getUsername()).getWorld().getGameRuleValue(gameRule.getJavaID()); - if (!value.isEmpty()) { - return Boolean.parseBoolean(value); + org.bukkit.GameRule bukkitGameRule = org.bukkit.GameRule.getByName(gameRule.getJavaID()); + if (bukkitGameRule == null) { + GeyserImpl.getInstance().getLogger().debug("Unknown game rule " + gameRule.getJavaID()); + return gameRule.getDefaultBooleanValue(); } + + Player bukkitPlayer = Objects.requireNonNull(Bukkit.getPlayer(session.getPlayerEntity().getUuid())); + Object value = bukkitPlayer.getWorld().getGameRuleValue(bukkitGameRule); + if (value instanceof Boolean booleanValue) { + return booleanValue; + } + GeyserImpl.getInstance().getLogger().debug("Expected a bool for " + gameRule + " but got " + value); return gameRule.getDefaultBooleanValue(); } @Override public int getGameRuleInt(GeyserSession session, GameRule gameRule) { - String value = Bukkit.getPlayer(session.getPlayerEntity().getUsername()).getWorld().getGameRuleValue(gameRule.getJavaID()); - if (!value.isEmpty()) { - return Integer.parseInt(value); + org.bukkit.GameRule bukkitGameRule = org.bukkit.GameRule.getByName(gameRule.getJavaID()); + if (bukkitGameRule == null) { + GeyserImpl.getInstance().getLogger().debug("Unknown game rule " + gameRule.getJavaID()); + return gameRule.getDefaultIntValue(); } + Player bukkitPlayer = Objects.requireNonNull(Bukkit.getPlayer(session.getPlayerEntity().getUuid())); + Object value = bukkitPlayer.getWorld().getGameRuleValue(bukkitGameRule); + if (value instanceof Integer intValue) { + return intValue; + } + GeyserImpl.getInstance().getLogger().debug("Expected an int for " + gameRule + " but got " + value); return gameRule.getDefaultIntValue(); } @@ -179,12 +197,11 @@ public class GeyserSpigotWorldManager extends WorldManager { @Override public boolean hasPermission(GeyserSession session, String permission) { - return Bukkit.getPlayer(session.getPlayerEntity().getUsername()).hasPermission(permission); + return Objects.requireNonNull(Bukkit.getPlayer(session.getPlayerEntity().getUsername())).hasPermission(permission); } - @Nonnull @Override - public CompletableFuture<@Nullable CompoundTag> getPickItemNbt(GeyserSession session, int x, int y, int z, boolean addNbtData) { + public @NonNull CompletableFuture<@Nullable CompoundTag> getPickItemNbt(GeyserSession session, int x, int y, int z, boolean addNbtData) { CompletableFuture<@Nullable CompoundTag> future = new CompletableFuture<>(); Player bukkitPlayer; if ((bukkitPlayer = Bukkit.getPlayer(session.getPlayerEntity().getUuid())) == null) { diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java index b505b361e..9f2208ea8 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java @@ -38,6 +38,7 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.core.appender.ConsoleAppender; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; @@ -51,7 +52,6 @@ import org.geysermc.geyser.platform.standalone.gui.GeyserStandaloneGUI; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.FileUtils; import org.geysermc.geyser.util.LoopbackUtil; -import org.jetbrains.annotations.NotNull; import java.io.File; import java.io.IOException; @@ -292,7 +292,7 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { return new GeyserStandaloneDumpInfo(this); } - @NotNull + @NonNull @Override public String getServerBindAddress() { throw new IllegalStateException(); @@ -325,7 +325,7 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { // Get the ignored properties Set ignoredProperties = OBJECT_MAPPER.getSerializationConfig().getAnnotationIntrospector() - .findPropertyIgnorals(beanDescription.getClassInfo()).getIgnored(); + .findPropertyIgnoralByName(OBJECT_MAPPER.getSerializationConfig() ,beanDescription.getClassInfo()).getIgnored(); // Filter properties removing the ignored ones return properties.stream() @@ -340,7 +340,7 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { * @param parentObject The object to alter * @param value The new value of the property */ - @SuppressWarnings("unchecked") // Required for enum usage + @SuppressWarnings({"unchecked", "rawtypes"}) // Required for enum usage private static void setConfigOption(BeanPropertyDefinition property, Object parentObject, Object value) { Object parsedValue = value; diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java index 1bdc90123..8e0eadb08 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/ColorPane.java @@ -28,11 +28,16 @@ package org.geysermc.geyser.platform.standalone.gui; import javax.swing.*; import javax.swing.text.*; import java.awt.*; +import java.io.Serial; /** - * This class was based on this code: https://stackoverflow.com/a/6899478/5299903 + * This class was based on this code */ public class ColorPane extends JTextPane { + + @Serial + private static final long serialVersionUID = 1L; + private static Color colorCurrent = ANSIColor.RESET.getColor(); private String remaining = ""; @@ -62,7 +67,7 @@ public class ColorPane extends JTextPane { int aPos = 0; // current char position in addString int aIndex; // index of next Escape sequence int mIndex; // index of "m" terminating Escape sequence - String tmpString = ""; + String tmpString; boolean stillSearching = true; // true until no more Escape sequences String addString = remaining + s; remaining = ""; diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java index af3e1069f..c3e2e10e8 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GeyserStandaloneGUI.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.platform.standalone.gui; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.command.GeyserCommandManager; @@ -64,7 +65,6 @@ public class GeyserStandaloneGUI { private final List ramValues = new ArrayList<>(); private final DefaultTableModel playerTableModel = new DefaultTableModel(); - private final JTable playerTable = new JTable(playerTableModel); /** * Create and show the Geyser-Standalone GUI @@ -158,6 +158,7 @@ public class GeyserStandaloneGUI { playerTableModel.addColumn(GeyserLocale.getLocaleStringLog("geyser.gui.table.ip")); playerTableModel.addColumn(GeyserLocale.getLocaleStringLog("geyser.gui.table.username")); + JTable playerTable = new JTable(playerTableModel); JScrollPane playerScrollPane = new JScrollPane(playerTable); rightContentPane.add(playerScrollPane); @@ -253,12 +254,12 @@ public class GeyserStandaloneGUI { } @Override - public void write(byte[] b, int off, int len) { + public void write(byte @NonNull [] b, int off, int len) { appendConsole(new String(b, off, len)); } @Override - public void write(byte[] b) { + public void write(byte @NonNull[] b) { write(b, 0, b.length); } }; diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java index d8fca3e1b..063824218 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/gui/GraphPanel.java @@ -29,15 +29,20 @@ import lombok.Setter; import javax.swing.*; import java.awt.*; +import java.io.Serial; import java.util.ArrayList; import java.util.Collection; import java.util.List; /** * This has been modified to fit Geyser more but is based on - * https://gist.github.com/roooodcastro/6325153#gistcomment-3107524 + * this Github gist */ public final class GraphPanel extends JPanel { + + @Serial + private static final long serialVersionUID = 1L; + private final static int padding = 10; private final static int labelPadding = 25; private final static int pointWidth = 4; @@ -103,7 +108,7 @@ public final class GraphPanel extends JPanel { g.drawLine(padding + labelPadding + 1 + pointWidth, y, width - padding, y); g.setColor(Color.BLACK); - final int tickValue = (int) (minScore + ((scoreRange * i) / numberYDivisions)); + final int tickValue = minScore + ((scoreRange * i) / numberYDivisions); final String yLabel = tickValue + ""; final int labelWidth = fontMetrics.stringWidth(yLabel); g.drawString(yLabel, x1 - labelWidth - 5, y + (fontHeight / 2) - 3); diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java index 4ffb286b8..68a9eb40b 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityInjector.java @@ -29,6 +29,7 @@ import com.velocitypowered.api.proxy.ProxyServer; import io.netty.bootstrap.ServerBootstrap; import io.netty.channel.*; import io.netty.channel.local.LocalAddress; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.network.netty.GeyserInjector; import org.geysermc.geyser.network.netty.LocalServerChannelWrapper; @@ -76,7 +77,7 @@ public class GeyserVelocityInjector extends GeyserInjector { .channel(LocalServerChannelWrapper.class) .childHandler(new ChannelInitializer<>() { @Override - protected void initChannel(Channel ch) throws Exception { + protected void initChannel(@NonNull Channel ch) throws Exception { initChannel.invoke(channelInitializer, ch); if (bootstrap.getGeyserConfig().isDisableCompression() && GeyserVelocityCompressionDisabler.ENABLED) { diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java index d7c6c588e..bd3d6085a 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java @@ -36,11 +36,13 @@ import com.velocitypowered.api.plugin.Plugin; import com.velocitypowered.api.proxy.ProxyServer; import lombok.Getter; import net.kyori.adventure.util.Codec; -import org.geysermc.geyser.api.util.PlatformType; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.api.extension.Extension; +import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommandManager; import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.dump.BootstrapDumpInfo; @@ -49,8 +51,6 @@ import org.geysermc.geyser.ping.IGeyserPingPassthrough; import org.geysermc.geyser.platform.velocity.command.GeyserVelocityCommandExecutor; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.FileUtils; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.slf4j.Logger; import java.io.File; @@ -222,7 +222,7 @@ public class GeyserVelocityPlugin implements GeyserBootstrap { return this.geyserInjector.getServerSocketAddress(); } - @NotNull + @NonNull @Override public String getServerBindAddress() { return proxyServer.getBoundAddress().getHostString(); diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java index 00c99e92b..403e4cb20 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/command/VelocityCommandSource.java @@ -30,6 +30,7 @@ import com.velocitypowered.api.proxy.ConsoleCommandSource; import com.velocitypowered.api.proxy.Player; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.text.GeyserLocale; @@ -56,7 +57,7 @@ public class VelocityCommandSource implements GeyserCommandSource { } @Override - public void sendMessage(String message) { + public void sendMessage(@NonNull String message) { handle.sendMessage(LegacyComponentSerializer.legacy('§').deserialize(message)); } diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java b/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java index 4fae21b32..e39d5119a 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/AesKeyProducer.java @@ -32,7 +32,7 @@ import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; public final class AesKeyProducer implements KeyProducer { - public static int KEY_SIZE = 128; + public static final int KEY_SIZE = 128; @Override public SecretKey produce() { diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java b/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java index 2f7b442f4..d3001f374 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/FloodgateCipher.java @@ -25,6 +25,7 @@ package org.geysermc.floodgate.crypto; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.floodgate.util.InvalidFormatException; import java.security.Key; @@ -97,7 +98,8 @@ public interface FloodgateCipher { * @return the decrypted data in a UTF-8 String * @throws Exception when the decrypting failed */ - default String decryptToString(byte[] data) throws Exception { + @SuppressWarnings("unused") + default @Nullable String decryptToString(byte[] data) throws Exception { byte[] decrypted = decrypt(data); if (decrypted == null) { return null; @@ -113,6 +115,7 @@ public interface FloodgateCipher { * @return the decrypted data in a byte[] * @throws Exception when the decrypting failed */ + @SuppressWarnings("unused") default byte[] decryptFromString(String data) throws Exception { return decrypt(data.getBytes(UTF_8)); } diff --git a/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java b/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java index 4ee00f366..0b8679dad 100644 --- a/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java +++ b/common/src/main/java/org/geysermc/floodgate/crypto/KeyProducer.java @@ -31,7 +31,7 @@ import java.nio.file.Path; import java.security.Key; public interface KeyProducer { - Key produce(); + @SuppressWarnings("unused") Key produce(); Key produceFrom(byte[] keyFileData); default Key produceFrom(Path keyFileLocation) throws IOException { diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java b/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java index 8ae28f422..f0dd3fadb 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsItem.java @@ -109,6 +109,7 @@ public final class NewsItem { return (T) data; } + @SuppressWarnings("unused") public String getRawMessage() { return message; } diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java b/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java index 00e34b622..31995e25d 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsItemAction.java @@ -25,6 +25,8 @@ package org.geysermc.floodgate.news; +import org.checkerframework.checker.nullness.qual.Nullable; + public enum NewsItemAction { ON_SERVER_STARTED, ON_OPERATOR_JOIN, @@ -33,7 +35,7 @@ public enum NewsItemAction { private static final NewsItemAction[] VALUES = values(); - public static NewsItemAction getByName(String actionName) { + public static @Nullable NewsItemAction getByName(String actionName) { for (NewsItemAction type : VALUES) { if (type.name().equalsIgnoreCase(actionName)) { return type; diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java b/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java index 9c2f3d15d..ed5d8f949 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsItemMessage.java @@ -26,6 +26,7 @@ package org.geysermc.floodgate.news; import com.google.gson.JsonArray; +import org.checkerframework.checker.nullness.qual.Nullable; // {} is used for things that have to be filled in by the server, // {@} is for things that have to be filled in by us @@ -49,7 +50,7 @@ public enum NewsItemMessage { this.messageSplitted = messageFormat.split(" "); } - public static NewsItemMessage getById(int id) { + public static @Nullable NewsItemMessage getById(int id) { return VALUES.length > id ? VALUES[id] : null; } diff --git a/common/src/main/java/org/geysermc/floodgate/news/NewsType.java b/common/src/main/java/org/geysermc/floodgate/news/NewsType.java index ed7c1553b..af1d8bc38 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/NewsType.java +++ b/common/src/main/java/org/geysermc/floodgate/news/NewsType.java @@ -26,6 +26,7 @@ package org.geysermc.floodgate.news; import com.google.gson.JsonObject; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.floodgate.news.data.*; import java.util.function.Function; @@ -44,7 +45,7 @@ public enum NewsType { this.readFunction = readFunction; } - public static NewsType getByName(String newsType) { + public static @Nullable NewsType getByName(String newsType) { for (NewsType type : VALUES) { if (type.name().equalsIgnoreCase(newsType)) { return type; diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java b/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java index 7f2c7360f..c987dcfbc 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/BuildSpecificData.java @@ -56,6 +56,7 @@ public final class BuildSpecificData implements ItemData { (allAffected || buildId > affectedGreaterThan && buildId < affectedLessThan); } + @SuppressWarnings("unused") public String getBranch() { return branch; } diff --git a/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java b/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java index 1479d20a1..6993fe91d 100644 --- a/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java +++ b/common/src/main/java/org/geysermc/floodgate/news/data/ConfigSpecificData.java @@ -51,6 +51,7 @@ public final class ConfigSpecificData implements ItemData { return configSpecificData; } + @SuppressWarnings("unused") public boolean isAffected(Map config) { for (Map.Entry entry : affectedKeys.entrySet()) { if (config.containsKey(entry.getKey())) { diff --git a/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java b/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java index 95fc62229..f0ed6ea00 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java +++ b/common/src/main/java/org/geysermc/floodgate/util/BedrockData.java @@ -72,6 +72,7 @@ public final class BedrockData implements Cloneable { false, subscribeId, verifyCode); } + @SuppressWarnings("unused") public static BedrockData fromString(String data) { String[] split = data.split("\0"); if (split.length != EXPECTED_LENGTH) { @@ -92,6 +93,7 @@ public final class BedrockData implements Cloneable { dataLength); } + @SuppressWarnings("unused") public boolean hasPlayerLink() { return linkedPlayer != null; } diff --git a/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java b/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java index e0630d48c..a2526700e 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java +++ b/common/src/main/java/org/geysermc/floodgate/util/InvalidFormatException.java @@ -26,6 +26,9 @@ package org.geysermc.floodgate.util; public class InvalidFormatException extends Exception { + + private static final long serialVersionUID = 1L; + public InvalidFormatException(String message) { super(message); } diff --git a/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java b/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java index 681080a30..0a131071e 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java +++ b/common/src/main/java/org/geysermc/floodgate/util/LinkedPlayer.java @@ -28,6 +28,7 @@ package org.geysermc.floodgate.util; import lombok.AccessLevel; import lombok.Getter; import lombok.RequiredArgsConstructor; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.UUID; @@ -56,7 +57,7 @@ public final class LinkedPlayer implements Cloneable { return new LinkedPlayer(javaUsername, javaUniqueId, bedrockId); } - public static LinkedPlayer fromString(String data) { + public static @Nullable LinkedPlayer fromString(String data) { String[] split = data.split(";"); if (split.length != 3) { return null; diff --git a/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java b/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java index d93042277..4438ae67f 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java +++ b/common/src/main/java/org/geysermc/floodgate/util/UiProfile.java @@ -25,6 +25,8 @@ package org.geysermc.floodgate.util; +import org.checkerframework.checker.nullness.qual.NonNull; + public enum UiProfile { CLASSIC, POCKET; @@ -37,7 +39,7 @@ public enum UiProfile { * @param id the UiProfile identifier * @return The UiProfile or {@link #CLASSIC} if the UiProfile wasn't found */ - public static UiProfile fromId(int id) { + public static @NonNull UiProfile fromId(int id) { return VALUES.length > id ? VALUES[id] : VALUES[0]; } } diff --git a/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java b/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java index 61e6c63b1..dffbabaaf 100644 --- a/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java +++ b/common/src/main/java/org/geysermc/floodgate/util/WebsocketEventType.java @@ -25,6 +25,8 @@ package org.geysermc.floodgate.util; +import org.checkerframework.checker.nullness.qual.Nullable; + public enum WebsocketEventType { /** * Sent once we successfully connected to the server @@ -81,7 +83,7 @@ public enum WebsocketEventType { this.id = id; } - public static WebsocketEventType fromId(int id) { + public static @Nullable WebsocketEventType fromId(int id) { return VALUES.length > id ? VALUES[id] : null; } diff --git a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java index 1827cfb36..4dbc1dca3 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java @@ -152,7 +152,7 @@ public interface GeyserBootstrap { * @param resource Resource to get * @return InputStream of the given resource */ - default @NonNull InputStream getResource(String resource) { + default @NonNull InputStream getResourceOrThrow(@NonNull String resource) { InputStream stream = getResourceOrNull(resource); if (stream == null) { throw new AssertionError("Unable to find resource: " + resource); diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 185ab7c2a..aef2288d6 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -71,6 +71,7 @@ import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.network.netty.GeyserServer; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; +import org.geysermc.geyser.registry.provider.ProviderSupplier; import org.geysermc.geyser.scoreboard.ScoreboardUpdater; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.PendingMicrosoftAuthentication; @@ -622,7 +623,7 @@ public class GeyserImpl implements GeyserApi { */ public boolean isProductionEnvironment() { // First is if Blossom runs, second is if Blossom doesn't run - // noinspection ConstantConditions - changes in production + //noinspection ConstantConditions,MismatchedStringCase - changes in production return !("git-local/dev-0000000".equals(GeyserImpl.GIT_VERSION) || "${gitVersion}".equals(GeyserImpl.GIT_VERSION)); } @@ -638,8 +639,13 @@ public class GeyserImpl implements GeyserApi { } @Override + @SuppressWarnings("unchecked") public @NonNull R provider(@NonNull Class apiClass, @Nullable Object... args) { - return (R) Registries.PROVIDERS.get(apiClass).create(args); + ProviderSupplier provider = Registries.PROVIDERS.get(apiClass); + if (provider == null) { + throw new IllegalArgumentException("No provider found for " + apiClass); + } + return (R) provider.create(args); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/GeyserLogger.java b/core/src/main/java/org/geysermc/geyser/GeyserLogger.java index 88220eec9..aa79e3630 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserLogger.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserLogger.java @@ -26,9 +26,10 @@ package org.geysermc.geyser; import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.command.GeyserCommandSource; -import javax.annotation.Nullable; public interface GeyserLogger extends GeyserCommandSource { @@ -119,7 +120,7 @@ public interface GeyserLogger extends GeyserCommandSource { } @Override - default void sendMessage(String message) { + default void sendMessage(@NonNull String message) { info(message); } diff --git a/core/src/main/java/org/geysermc/geyser/GeyserMain.java b/core/src/main/java/org/geysermc/geyser/GeyserMain.java index 4e60a79b8..05cbebed4 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserMain.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserMain.java @@ -30,6 +30,7 @@ import java.io.InputStream; import java.lang.reflect.Method; import java.nio.charset.StandardCharsets; import java.util.Locale; +import java.util.Objects; import java.util.Scanner; public class GeyserMain { @@ -61,8 +62,8 @@ public class GeyserMain { helpStream = GeyserMain.class.getClassLoader().getResourceAsStream("languages/run-help/en_US.txt"); } - Scanner help = new Scanner(helpStream, StandardCharsets.UTF_8).useDelimiter("\\Z"); - String line = ""; + Scanner help = new Scanner(Objects.requireNonNull(helpStream), StandardCharsets.UTF_8).useDelimiter("\\Z"); + String line; while (help.hasNext()) { line = help.next(); diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java index 5808dbc2c..47d57e73f 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommand.java @@ -29,10 +29,10 @@ import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.experimental.Accessors; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.session.GeyserSession; -import javax.annotation.Nullable; import java.util.Collections; import java.util.List; @@ -73,15 +73,6 @@ public abstract class GeyserCommand implements Command { return Collections.emptyList(); } - /** - * Shortcut to {@link #subCommands()} ()}{@code .isEmpty()}. - * - * @return true if there are subcommand present for this command. - */ - public boolean hasSubCommands() { - return !this.subCommands().isEmpty(); - } - public void setAliases(List aliases) { this.aliases = aliases; } diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java index a9b1c734f..37d2ef4fb 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandExecutor.java @@ -26,11 +26,11 @@ package org.geysermc.geyser.command; import lombok.AllArgsConstructor; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.session.GeyserSession; -import javax.annotation.Nullable; import java.util.ArrayList; import java.util.Collections; import java.util.List; diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java index 373395ea2..d646845c7 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java @@ -29,6 +29,7 @@ import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import lombok.Getter; import lombok.RequiredArgsConstructor; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.command.Command; @@ -53,8 +54,6 @@ import org.geysermc.geyser.event.type.GeyserDefineCommandsEventImpl; import org.geysermc.geyser.extension.command.GeyserExtensionCommand; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import java.util.Collections; import java.util.HashMap; @@ -136,12 +135,12 @@ public class GeyserCommandManager { } } - @NotNull + @NonNull public Map commands() { return Collections.unmodifiableMap(this.commands); } - @NotNull + @NonNull public Map> extensionCommands() { return Collections.unmodifiableMap(this.extensionCommands); } diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java index 12294ae06..4cda72c9b 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.command.defaults; import com.fasterxml.jackson.databind.JsonNode; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommand; @@ -34,7 +35,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.LoopbackUtil; import org.geysermc.geyser.util.WebUtils; -import org.jetbrains.annotations.Nullable; import java.util.Random; import java.util.concurrent.CompletableFuture; diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java index 544be7446..b3fee375f 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/DumpCommand.java @@ -98,7 +98,7 @@ public class DumpCommand extends GeyserCommand { return; } - String uploadedDumpUrl = ""; + String uploadedDumpUrl; if (offlineDump) { sender.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.dump.writing", sender.locale())); diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java index 30d422b23..df33437d9 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ExtensionsCommand.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.command.defaults; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.extension.Extension; import org.geysermc.geyser.command.GeyserCommand; @@ -32,7 +33,6 @@ import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.GeyserLocale; -import org.jetbrains.annotations.Nullable; import java.util.Comparator; import java.util.List; diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java index b263d6727..eb2e8ff47 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/VersionCommand.java @@ -27,8 +27,8 @@ package org.geysermc.geyser.command.defaults; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.geysermc.geyser.Constants; -import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommand; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.network.GameProtocol; @@ -37,7 +37,6 @@ import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.WebUtils; -import java.io.IOException; import java.net.URLEncoder; import java.nio.charset.StandardCharsets; import java.util.List; @@ -77,7 +76,7 @@ public class VersionCommand extends GeyserCommand { sender.sendMessage(GeyserLocale.getPlayerLocaleString("geyser.commands.version.checking", sender.locale())); try { String buildXML = WebUtils.getBody("https://ci.opencollab.dev/job/GeyserMC/job/Geyser/job/" + - URLEncoder.encode(GeyserImpl.BRANCH, StandardCharsets.UTF_8.toString()) + "/lastSuccessfulBuild/api/xml?xpath=//buildNumber"); + URLEncoder.encode(GeyserImpl.BRANCH, StandardCharsets.UTF_8) + "/lastSuccessfulBuild/api/xml?xpath=//buildNumber"); if (buildXML.startsWith("")) { int latestBuildNum = Integer.parseInt(buildXML.replaceAll("<(\\\\)?(/)?buildNumber>", "").trim()); int buildNum = this.geyser.buildNumber(); @@ -90,7 +89,7 @@ public class VersionCommand extends GeyserCommand { } else { throw new AssertionError("buildNumber missing"); } - } catch (IOException e) { + } catch (Exception e) { GeyserImpl.getInstance().getLogger().error(GeyserLocale.getLocaleStringLog("geyser.commands.version.failed"), e); sender.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.commands.version.failed", sender.locale())); } diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java index 51cd7d4ae..f9bb15b32 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java @@ -52,6 +52,7 @@ public interface GeyserConfiguration { List getSavedUserLogins(); + @SuppressWarnings("BooleanMethodIsAlwaysInverted") boolean isCommandSuggestions(); @JsonIgnore @@ -93,6 +94,7 @@ public interface GeyserConfiguration { boolean isForceResourcePacks(); + @SuppressWarnings("BooleanMethodIsAlwaysInverted") boolean isXboxAchievementsEnabled(); int getCacheImages(); diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java index 95ac7b1de..0874daa07 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java @@ -34,6 +34,7 @@ import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; import lombok.Getter; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.network.CIDRMatcher; @@ -158,7 +159,7 @@ public abstract class GeyserJacksonConfiguration implements GeyserConfiguration private String address = "0.0.0.0"; @Override - public String address() { + public @NonNull String address() { return address; } @@ -260,7 +261,7 @@ public abstract class GeyserJacksonConfiguration implements GeyserConfiguration private AuthType authType = AuthType.ONLINE; @Override - public AuthType authType() { + public @NonNull AuthType authType() { return authType; } diff --git a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java index 290a0e3ad..818607314 100644 --- a/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java +++ b/core/src/main/java/org/geysermc/geyser/dump/DumpInfo.java @@ -33,7 +33,6 @@ import com.google.common.io.ByteSource; import com.google.common.io.Files; import it.unimi.dsi.fastutil.objects.Object2IntMap; import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; -import lombok.AllArgsConstructor; import lombok.Getter; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.geysermc.floodgate.util.DeviceOs; @@ -106,8 +105,8 @@ public class DumpInfo { // https://stackoverflow.com/questions/304268/getting-a-files-md5-checksum-in-java File file = new File(DumpInfo.class.getProtectionDomain().getCodeSource().getLocation().toURI()); ByteSource byteSource = Files.asByteSource(file); - // Jenkins uses MD5 for its hash - //noinspection UnstableApiUsage + // Jenkins uses MD5 for its hash - TODO remove + //noinspection UnstableApiUsage,deprecation md5Hash = byteSource.hash(Hashing.md5()).toString(); //noinspection UnstableApiUsage sha256Hash = byteSource.hash(Hashing.sha256()).toString(); @@ -118,7 +117,7 @@ public class DumpInfo { } this.hashInfo = new HashInfo(md5Hash, sha256Hash); - this.ramInfo = new DumpInfo.RamInfo(); + this.ramInfo = new RamInfo(); if (addLog) { this.logsInfo = new LogsInfo(); @@ -202,7 +201,7 @@ public class DumpInfo { private boolean checkDockerBasic() { try { String OS = System.getProperty("os.name").toLowerCase(); - if (OS.indexOf("nix") >= 0 || OS.indexOf("nux") >= 0 || OS.indexOf("aix") > 0) { + if (OS.contains("nix") || OS.contains("nux") || OS.indexOf("aix") > 0) { String output = new String(java.nio.file.Files.readAllBytes(Paths.get("/proc/1/cgroup"))); if (output.contains("docker")) { @@ -259,60 +258,30 @@ public class DumpInfo { } } - @AllArgsConstructor - @Getter - public static class HashInfo { - private final String md5Hash; - private final String sha256Hash; + public record HashInfo(String md5Hash, String sha256Hash) { } - @Getter - public static class RamInfo { - private final long free; - private final long total; - private final long max; - - RamInfo() { - this.free = Runtime.getRuntime().freeMemory() / MEGABYTE; - this.total = Runtime.getRuntime().totalMemory() / MEGABYTE; - this.max = Runtime.getRuntime().maxMemory() / MEGABYTE; + public record RamInfo(long free, long total, long max) { + public RamInfo() { + this(Runtime.getRuntime().freeMemory() / MEGABYTE, + Runtime.getRuntime().totalMemory() / MEGABYTE, + Runtime.getRuntime().maxMemory() / MEGABYTE); } } /** * E.G. `-Xmx1024M` - all runtime JVM flags on this machine */ - @Getter - public static class FlagsInfo { - private final List flags; - - FlagsInfo() { - this.flags = ManagementFactory.getRuntimeMXBean().getInputArguments(); + public record FlagsInfo(List flags) { + public FlagsInfo() { + this(ManagementFactory.getRuntimeMXBean().getInputArguments()); } } - @Getter - @AllArgsConstructor - public static class ExtensionInfo { - public boolean enabled; - public String name; - public String version; - public String apiVersion; - public String main; - public List authors; + public record ExtensionInfo(boolean enabled, String name, String version, String apiVersion, String main, List authors) { } - @Getter - @AllArgsConstructor - public static class GitInfo { - private final String buildNumber; - @JsonProperty("git.commit.id.abbrev") - private final String commitHashAbbrev; - @JsonProperty("git.commit.id") - private final String commitHash; - @JsonProperty("git.branch") - private final String branchName; - @JsonProperty("git.remote.origin.url") - private final String originUrl; + public record GitInfo(String buildNumber, @JsonProperty("git.commit.id.abbrev") String commitHashAbbrev, @JsonProperty("git.commit.id") String commitHash, + @JsonProperty("git.branch") String branchName, @JsonProperty("git.remote.origin.url") String originUrl) { } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java index 566b3daff..8b430d559 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinition.java @@ -59,6 +59,7 @@ public record EntityDefinition(EntityFactory factory, Entit return new Builder<>(factory); } + @SuppressWarnings("unchecked") public void translateMetadata(T entity, EntityMetadata> metadata) { EntityMetadataTranslator>> translator = (EntityMetadataTranslator>>) this.translators.get(metadata.getId()); if (translator == null) { diff --git a/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java b/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java index 92bfb7585..234c1afe9 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java +++ b/core/src/main/java/org/geysermc/geyser/entity/attribute/GeyserAttributeType.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.attribute; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.AttributeData; import lombok.AllArgsConstructor; import lombok.Getter; @@ -69,7 +70,7 @@ public enum GeyserAttributeType { return getAttribute(value, maximum); } - public AttributeData getAttribute(float value, float maximum) { + public @Nullable AttributeData getAttribute(float value, float maximum) { if (bedrockIdentifier == null) { return null; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java index fcd4f2160..84dfae468 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/AreaEffectCloudEntity.java @@ -34,7 +34,6 @@ import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.registry.Registries; -import org.geysermc.geyser.registry.type.ParticleMapping; import org.geysermc.geyser.session.GeyserSession; import java.util.UUID; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java index 5ca739f61..a2b7cc6ec 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/Entity.java @@ -36,6 +36,7 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector2f; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -580,7 +581,7 @@ public class Entity implements GeyserEntity { } @SuppressWarnings("unchecked") - public I as(Class entityClass) { + public @Nullable I as(Class entityClass) { return entityClass.isInstance(this) ? (I) this : null; } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java index be38098ac..245b99cef 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/LivingEntity.java @@ -38,6 +38,7 @@ import com.github.steveice10.opennbt.tag.builtin.StringTag; import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.AttributeData; @@ -120,7 +121,7 @@ public class LivingEntity extends Entity { session.sendUpstreamPacket(attributesPacket); } - public Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { + public @Nullable Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { Optional optionalPos = entityMetadata.getValue(); if (optionalPos.isPresent()) { Vector3i bedPosition = optionalPos.get(); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java index 72ae88310..60840e65b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/ThrowableEntity.java @@ -51,7 +51,6 @@ public class ThrowableEntity extends Entity implements Tickable { /** * Updates the position for the Bedrock client. - * * Java clients assume the next positions of moving items. Bedrock needs to be explicitly told positions */ @Override diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java index ec0caac33..9cc3a006e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AbstractFishEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -34,7 +35,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InteractionResult; -import javax.annotation.Nonnull; import java.util.UUID; public class AbstractFishEntity extends WaterEntity { @@ -48,9 +48,9 @@ public class AbstractFishEntity extends WaterEntity { setFlag(EntityFlag.HAS_GRAVITY, false); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (EntityUtils.attemptToBucket(itemInHand)) { return InteractionResult.SUCCESS; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java index f39200eed..48d633e5d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/AllayEntity.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -36,7 +37,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class AllayEntity extends MobEntity { @@ -54,9 +54,9 @@ public class AllayEntity extends MobEntity { this.canDuplicate = entityMetadata.getPrimitiveValue(); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (this.canDuplicate && getFlag(EntityFlag.DANCING) && isDuplicationItem(itemInHand)) { // Maybe better as another tag? return InteractiveTag.GIVE_ITEM_TO_ALLAY; @@ -70,9 +70,9 @@ public class AllayEntity extends MobEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (this.canDuplicate && getFlag(EntityFlag.DANCING) && isDuplicationItem(itemInHand)) { //TOCHECK sound return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java index c9018fe76..c64776f18 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/ArmorStandEntity.java @@ -70,7 +70,7 @@ public class ArmorStandEntity extends LivingEntity { private boolean primaryEntity = true; /** * Whether the entity's position must be updated to included the offset. - * + *

* This should be true when the Java server marks the armor stand as invisible, but we shrink the entity * to allow the nametag to appear. Basically: * - Is visible: this is irrelevant (false) @@ -207,7 +207,7 @@ public class ArmorStandEntity extends LivingEntity { * @param negativeZToggle the flag to set true if the Z value of rotation is negative * @param rotation the Java rotation value */ - private void onRotationUpdate(EntityDataType dataLeech, EntityFlag negativeXToggle, EntityFlag negativeYToggle, EntityFlag negativeZToggle, Vector3f rotation) { + private void onRotationUpdate(EntityDataType dataLeech, EntityFlag negativeXToggle, EntityFlag negativeYToggle, EntityFlag negativeZToggle, Vector3f rotation) { // Indicate that rotation should be checked setFlag(EntityFlag.BRIBED, true); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java index 7c1d8efc7..f0348bcaf 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/DolphinEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -33,7 +34,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class DolphinEntity extends WaterEntity { @@ -46,18 +46,18 @@ public class DolphinEntity extends WaterEntity { return true; } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!itemInHand.isEmpty() && session.getTagCache().isFish(itemInHand)) { return InteractiveTag.FEED; } return super.testMobInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!itemInHand.isEmpty() && session.getTagCache().isFish(itemInHand)) { // Feed return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java index 1f653decd..7afa4b436 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/IronGolemEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -35,7 +36,6 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; -import javax.annotation.Nonnull; import java.util.UUID; public class IronGolemEntity extends GolemEntity { @@ -51,9 +51,9 @@ public class IronGolemEntity extends GolemEntity { maxHealth = 100f; } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (itemInHand.asItem() == Items.IRON_INGOT) { if (health < maxHealth) { // Healing the iron golem diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java index 60a9a1474..0ac81c957 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/MobEntity.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -40,7 +41,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class MobEntity extends LivingEntity { @@ -133,13 +133,13 @@ public class MobEntity extends LivingEntity { return InteractionResult.PASS; } - @Nonnull - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + @NonNull + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { return InteractiveTag.NONE; } - @Nonnull - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + @NonNull + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { return InteractionResult.PASS; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java index ced274185..7f0699415 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/SnowGolemEntity.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -36,7 +37,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class SnowGolemEntity extends GolemEntity { @@ -51,9 +51,9 @@ public class SnowGolemEntity extends GolemEntity { setFlag(EntityFlag.SHEARED, (xd & 0x10) != 0x10); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (Items.SHEARS == itemInHand.asItem() && isAlive() && !getFlag(EntityFlag.SHEARED)) { // Shearing the snow golem return InteractiveTag.SHEAR; @@ -61,9 +61,9 @@ public class SnowGolemEntity extends GolemEntity { return InteractiveTag.NONE; } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (Items.SHEARS == itemInHand.asItem() && isAlive() && !getFlag(EntityFlag.SHEARED)) { // Shearing the snow golem return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java index 47ddb9126..7094c431e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/TadpoleEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -34,7 +35,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class TadpoleEntity extends AbstractFishEntity { @@ -42,18 +42,18 @@ public class TadpoleEntity extends AbstractFishEntity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (isFood(itemInHand)) { return InteractiveTag.FEED; } return super.testMobInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (isFood(itemInHand)) { //TODO particles return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java index 2c46da13b..7278709ce 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AnimalEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -38,7 +39,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class AnimalEntity extends AgeableEntity { @@ -59,18 +59,18 @@ public class AnimalEntity extends AgeableEntity { return item == Items.WHEAT; } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (canEat(itemInHand)) { return InteractiveTag.FEED; } return super.testMobInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (canEat(itemInHand)) { // FEED if (getFlag(EntityFlag.BABY)) { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java index 06eb0791b..85b2afc14 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/AxolotlEntity.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -38,7 +39,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InteractionResult; -import javax.annotation.Nonnull; import java.util.UUID; public class AxolotlEntity extends AnimalEntity { @@ -74,9 +74,9 @@ public class AxolotlEntity extends AnimalEntity { return true; } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (EntityUtils.attemptToBucket(itemInHand)) { return InteractionResult.SUCCESS; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java index 01641c8c3..cdcf534a3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/CowEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -36,7 +37,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class CowEntity extends AnimalEntity { @@ -44,9 +44,9 @@ public class CowEntity extends AnimalEntity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (getFlag(EntityFlag.BABY) || itemInHand.asItem() != Items.BUCKET) { return super.testMobInteraction(hand, itemInHand); } @@ -54,9 +54,9 @@ public class CowEntity extends AnimalEntity { return InteractiveTag.MILK; } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (getFlag(EntityFlag.BABY) || itemInHand.asItem() != Items.BUCKET) { return super.mobInteract(hand, itemInHand); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java index 20b8f5ccf..9ed94f96f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/GoatEntity.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.Pose; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -38,7 +39,6 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; -import javax.annotation.Nonnull; import java.util.UUID; public class GoatEntity extends AnimalEntity { @@ -70,9 +70,9 @@ public class GoatEntity extends AnimalEntity { // TODO testMobInteraction? - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.BABY) && itemInHand.asItem() == Items.BUCKET) { session.playSoundEvent(isScreamer ? SoundEvent.MILK_SCREAMER : SoundEvent.MILK, position); return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java index 2d136a169..1c347bf31 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/MooshroomEntity.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ObjectEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.geysermc.geyser.entity.EntityDefinition; @@ -37,7 +38,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class MooshroomEntity extends AnimalEntity { @@ -52,9 +52,9 @@ public class MooshroomEntity extends AnimalEntity { dirtyMetadata.put(EntityDataTypes.VARIANT, isBrown ? 1 : 0); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!isBaby()) { if (itemInHand.asItem() == Items.BOWL) { // Stew @@ -67,9 +67,9 @@ public class MooshroomEntity extends AnimalEntity { return super.testMobInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean isBaby = isBaby(); if (!isBaby && itemInHand.asItem() == Items.BOWL) { // Stew diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java index c81ddd52e..c115ebcdc 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/OcelotEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -36,7 +37,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class OcelotEntity extends AnimalEntity { @@ -50,9 +50,9 @@ public class OcelotEntity extends AnimalEntity { return item == Items.COD || item == Items.SALMON; } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.TRUSTING) && canEat(itemInHand) && session.getPlayerEntity().getPosition().distanceSquared(position) < 9f) { // Attempt to feed return InteractiveTag.FEED; @@ -61,9 +61,9 @@ public class OcelotEntity extends AnimalEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.TRUSTING) && canEat(itemInHand) && session.getPlayerEntity().getPosition().distanceSquared(position) < 9f) { // Attempt to feed return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java index 212eaa91e..d2ef36932 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PandaEntity.java @@ -28,6 +28,8 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; @@ -41,8 +43,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.UUID; public class PandaEntity extends AnimalEntity { @@ -93,18 +93,18 @@ public class PandaEntity extends AnimalEntity { return item == Items.BAMBOO; } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (mainGene == Gene.WORRIED && session.isThunder()) { return InteractiveTag.NONE; } return super.testMobInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (mainGene == Gene.WORRIED && session.isThunder()) { // Huh! return InteractionResult.PASS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java index 91e94321c..2bc02cd55 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/PigEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -37,7 +38,6 @@ import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class PigEntity extends AnimalEntity { @@ -51,9 +51,9 @@ public class PigEntity extends AnimalEntity { return item == Items.CARROT || item == Items.POTATO || item == Items.BEETROOT; } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!canEat(itemInHand) && getFlag(EntityFlag.SADDLED) && passengers.isEmpty() && !session.isSneaking()) { // Mount return InteractiveTag.MOUNT; @@ -68,9 +68,9 @@ public class PigEntity extends AnimalEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!canEat(itemInHand) && getFlag(EntityFlag.SADDLED) && passengers.isEmpty() && !session.isSneaking()) { // Mount return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java index 8c9458012..13059244a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/SheepEntity.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -38,7 +39,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class SheepEntity extends AnimalEntity { @@ -55,9 +55,9 @@ public class SheepEntity extends AnimalEntity { dirtyMetadata.put(EntityDataTypes.COLOR, (byte) color); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (itemInHand.asItem() == Items.SHEARS) { return InteractiveTag.SHEAR; } else { @@ -73,9 +73,9 @@ public class SheepEntity extends AnimalEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (itemInHand.asItem() == Items.SHEARS) { return InteractionResult.CONSUME; } else { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java index e58fa5aca..39a55fa1e 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/StriderEntity.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.animal; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -39,7 +40,6 @@ import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class StriderEntity extends AnimalEntity { @@ -98,9 +98,9 @@ public class StriderEntity extends AnimalEntity { return item == Items.WARPED_FUNGUS; } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!canEat(itemInHand) && getFlag(EntityFlag.SADDLED) && passengers.isEmpty() && !session.isSneaking()) { // Mount Strider return InteractiveTag.RIDE_STRIDER; @@ -115,9 +115,9 @@ public class StriderEntity extends AnimalEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!canEat(itemInHand) && getFlag(EntityFlag.SADDLED) && passengers.isEmpty() && !session.isSneaking()) { // Mount Strider return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java index 872f72190..faa495487 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/AbstractHorseEntity.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.animal.horse; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityEventType; @@ -44,7 +45,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.Set; import java.util.UUID; @@ -128,14 +128,14 @@ public class AbstractHorseEntity extends AnimalEntity { return DONKEY_AND_HORSE_FOODS.contains(item); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { return testHorseInteraction(hand, itemInHand); } - @Nonnull - protected final InteractiveTag testHorseInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + @NonNull + protected final InteractiveTag testHorseInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean isBaby = isBaby(); if (!isBaby) { if (getFlag(EntityFlag.TAMED) && session.isSneaking()) { @@ -178,14 +178,14 @@ public class AbstractHorseEntity extends AnimalEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { return mobHorseInteract(hand, itemInHand); } - @Nonnull - protected final InteractionResult mobHorseInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + @NonNull + protected final InteractionResult mobHorseInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean isBaby = isBaby(); if (!isBaby) { if (getFlag(EntityFlag.TAMED) && session.isSneaking()) { @@ -236,21 +236,21 @@ public class AbstractHorseEntity extends AnimalEntity { } } - protected boolean testSaddle(@Nonnull GeyserItemStack itemInHand) { + protected boolean testSaddle(@NonNull GeyserItemStack itemInHand) { return isAlive() && !getFlag(EntityFlag.BABY) && getFlag(EntityFlag.TAMED); } - protected boolean testForChest(@Nonnull GeyserItemStack itemInHand) { + protected boolean testForChest(@NonNull GeyserItemStack itemInHand) { return false; } - protected boolean additionalTestForInventoryOpen(@Nonnull GeyserItemStack itemInHand) { + protected boolean additionalTestForInventoryOpen(@NonNull GeyserItemStack itemInHand) { return itemInHand.asItem().javaIdentifier().endsWith("_horse_armor"); } /* Just a place to stuff common code for the undead variants without having duplicate code */ - protected final InteractiveTag testUndeadHorseInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected final InteractiveTag testUndeadHorseInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.TAMED)) { return InteractiveTag.NONE; } else if (isBaby()) { @@ -272,7 +272,7 @@ public class AbstractHorseEntity extends AnimalEntity { } } - protected final InteractionResult undeadHorseInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected final InteractionResult undeadHorseInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (!getFlag(EntityFlag.TAMED)) { return InteractionResult.PASS; } else if (isBaby()) { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java index 4ce6f062b..8106b096d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/CamelEntity.java @@ -111,6 +111,5 @@ public class CamelEntity extends AbstractHorseEntity { } public void setDashing(BooleanEntityMetadata entityMetadata) { - } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java index 0fb9438d2..fc8584de3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ChestedHorseEntity.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.entity.type.living.animal.horse; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -32,7 +33,6 @@ import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.session.GeyserSession; -import javax.annotation.Nonnull; import java.util.UUID; public class ChestedHorseEntity extends AbstractHorseEntity { @@ -47,18 +47,18 @@ public class ChestedHorseEntity extends AbstractHorseEntity { } @Override - protected boolean testSaddle(@Nonnull GeyserItemStack itemInHand) { + protected boolean testSaddle(@NonNull GeyserItemStack itemInHand) { // Not checked here return false; } @Override - protected boolean testForChest(@Nonnull GeyserItemStack itemInHand) { + protected boolean testForChest(@NonNull GeyserItemStack itemInHand) { return itemInHand.asItem() == Items.CHEST && !getFlag(EntityFlag.CHESTED); } @Override - protected boolean additionalTestForInventoryOpen(@Nonnull GeyserItemStack itemInHand) { + protected boolean additionalTestForInventoryOpen(@NonNull GeyserItemStack itemInHand) { // Armor won't work on these return false; } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java index 43c76202c..7080f9f75 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/SkeletonHorseEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal.horse; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -33,7 +34,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class SkeletonHorseEntity extends AbstractHorseEntity { @@ -41,15 +41,15 @@ public class SkeletonHorseEntity extends AbstractHorseEntity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { return testUndeadHorseInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { return undeadHorseInteract(hand, itemInHand); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java index 423537496..3275712fc 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/horse/ZombieHorseEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal.horse; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.entity.EntityDefinition; import org.geysermc.geyser.inventory.GeyserItemStack; @@ -33,7 +34,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class ZombieHorseEntity extends AbstractHorseEntity { @@ -41,15 +41,15 @@ public class ZombieHorseEntity extends AbstractHorseEntity { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { return testUndeadHorseInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { return undeadHorseInteract(hand, itemInHand); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java index 7903d85ca..412157b5d 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/CatEntity.java @@ -29,6 +29,7 @@ import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanE import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -40,7 +41,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class CatEntity extends TameableEntity { @@ -112,9 +112,9 @@ public class CatEntity extends TameableEntity { return item == Items.COD || item == Items.SALMON; } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean tamed = getFlag(EntityFlag.TAMED); if (tamed && ownerBedrockId == session.getPlayerEntity().getGeyserId()) { // Toggle sitting @@ -124,9 +124,9 @@ public class CatEntity extends TameableEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean tamed = getFlag(EntityFlag.TAMED); if (tamed && ownerBedrockId == session.getPlayerEntity().getGeyserId()) { return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java index 43f379de8..4c4b6a222 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/ParrotEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.animal.tameable; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -36,7 +37,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.Set; import java.util.UUID; @@ -61,9 +61,9 @@ public class ParrotEntity extends TameableEntity { return item == Items.COOKIE; } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean tame = getFlag(EntityFlag.TAMED); if (!tame && isTameFood(itemInHand.asItem())) { return InteractiveTag.FEED; @@ -76,9 +76,9 @@ public class ParrotEntity extends TameableEntity { return super.testMobInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { boolean tame = getFlag(EntityFlag.TAMED); if (!tame && isTameFood(itemInHand.asItem())) { return InteractionResult.SUCCESS; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java index ecf0736a3..0f5b36ec3 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/animal/tameable/WolfEntity.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.animal.tameable; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -40,7 +41,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.Set; import java.util.UUID; @@ -103,9 +103,9 @@ public class WolfEntity extends TameableEntity { return !getFlag(EntityFlag.ANGRY) && super.canBeLeashed(); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (getFlag(EntityFlag.ANGRY)) { return InteractiveTag.NONE; } @@ -126,9 +126,9 @@ public class WolfEntity extends TameableEntity { return super.testMobInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (ownerBedrockId == session.getPlayerEntity().getGeyserId() || getFlag(EntityFlag.TAMED) || itemInHand.asItem() == Items.BONE && !getFlag(EntityFlag.ANGRY)) { // Sitting toggle or feeding; not angry diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java index b8465f9ca..c7b29130f 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/AbstractMerchantEntity.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.entity.type.living.merchant; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.geysermc.geyser.entity.EntityDefinition; @@ -37,7 +38,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class AbstractMerchantEntity extends AgeableEntity { @@ -51,9 +51,9 @@ public class AbstractMerchantEntity extends AgeableEntity { return false; } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (itemInHand.asItem() != Items.VILLAGER_SPAWN_EGG && (definition != EntityDefinitions.VILLAGER || !getFlag(EntityFlag.SLEEPING) && ((VillagerEntity) this).isCanTradeWith())) { // An additional check we know cannot work @@ -64,9 +64,9 @@ public class AbstractMerchantEntity extends AgeableEntity { return super.testMobInteraction(hand, itemInHand); } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (itemInHand.asItem() != Items.VILLAGER_SPAWN_EGG && (definition != EntityDefinitions.VILLAGER || !getFlag(EntityFlag.SLEEPING)) && (definition != EntityDefinitions.WANDERING_TRADER || !getFlag(EntityFlag.BABY))) { diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java index 84fa7d1bd..9b0f50050 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/merchant/VillagerEntity.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.merchant; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.VillagerData; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -78,6 +79,7 @@ public class VillagerEntity extends AbstractMerchantEntity { VILLAGER_REGIONS[6] = 6; } + @Nullable private Vector3i bedPosition; /** * Used in the interactive tag manager @@ -103,7 +105,7 @@ public class VillagerEntity extends AbstractMerchantEntity { } @Override - public Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { + public @Nullable Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { return bedPosition = super.setBedPosition(entityMetadata); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java index e50722681..33ea4e544 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/CreeperEntity.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.entity.type.living.monster; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.IntEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -37,7 +38,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class CreeperEntity extends MonsterEntity { @@ -62,9 +62,9 @@ public class CreeperEntity extends MonsterEntity { setFlag(EntityFlag.IGNITED, ignitedByFlintAndSteel); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (session.getTagCache().isCreeperIgniter(itemInHand.asItem())) { return InteractiveTag.IGNITE_CREEPER; } else { @@ -72,9 +72,9 @@ public class CreeperEntity extends MonsterEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (session.getTagCache().isCreeperIgniter(itemInHand.asItem())) { // Ignite creeper - as of 1.19.3 session.playSoundEvent(SoundEvent.IGNITE, position); diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java index 25fe7f802..450c546ec 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/PiglinEntity.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.entity.type.living.monster; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -37,7 +38,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class PiglinEntity extends BasePiglinEntity { @@ -71,9 +71,9 @@ public class PiglinEntity extends BasePiglinEntity { super.updateOffHand(session); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { InteractiveTag tag = super.testMobInteraction(hand, itemInHand); if (tag != InteractiveTag.NONE) { return tag; @@ -82,9 +82,9 @@ public class PiglinEntity extends BasePiglinEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { InteractionResult superResult = super.mobInteract(hand, itemInHand); if (superResult.consumesAction()) { return superResult; @@ -93,7 +93,7 @@ public class PiglinEntity extends BasePiglinEntity { } } - private boolean canGiveGoldTo(@Nonnull GeyserItemStack itemInHand) { + private boolean canGiveGoldTo(@NonNull GeyserItemStack itemInHand) { return !getFlag(EntityFlag.BABY) && itemInHand.asItem() == Items.GOLD_INGOT && !getFlag(EntityFlag.ADMIRING); } } diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java index fbac8663f..32e45507a 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/living/monster/ZombieVillagerEntity.java @@ -29,6 +29,7 @@ import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadat import com.github.steveice10.mc.protocol.data.game.entity.metadata.VillagerData; import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.BooleanEntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; @@ -40,7 +41,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.InteractionResult; import org.geysermc.geyser.util.InteractiveTag; -import javax.annotation.Nonnull; import java.util.UUID; public class ZombieVillagerEntity extends ZombieEntity { @@ -67,9 +67,9 @@ public class ZombieVillagerEntity extends ZombieEntity { return getFlag(EntityFlag.IS_TRANSFORMING) || super.isShaking(); } - @Nonnull + @NonNull @Override - protected InteractiveTag testMobInteraction(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractiveTag testMobInteraction(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (itemInHand.asItem() == Items.GOLDEN_APPLE) { return InteractiveTag.CURE; } else { @@ -77,9 +77,9 @@ public class ZombieVillagerEntity extends ZombieEntity { } } - @Nonnull + @NonNull @Override - protected InteractionResult mobInteract(@Nonnull Hand hand, @Nonnull GeyserItemStack itemInHand) { + protected InteractionResult mobInteract(@NonNull Hand hand, @NonNull GeyserItemStack itemInHand) { if (itemInHand.asItem() == Items.GOLDEN_APPLE) { // The client doesn't know if the entity has weakness as that's not usually sent over the network return InteractionResult.CONSUME; diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java index e80418744..7504db1b1 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java @@ -36,6 +36,7 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import lombok.Getter; import lombok.Setter; import net.kyori.adventure.text.Component; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.protocol.bedrock.data.*; @@ -57,7 +58,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.ChunkUtils; -import javax.annotation.Nullable; import java.util.Collections; import java.util.List; import java.util.Optional; @@ -86,6 +86,7 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { @Nullable private String texturesProperty; + @Nullable private Vector3i bedPosition; /** @@ -240,7 +241,7 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { } @Override - public Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { + public @Nullable Vector3i setBedPosition(EntityMetadata, ?> entityMetadata) { bedPosition = super.setBedPosition(entityMetadata); if (bedPosition != null) { // Required to sync position of entity to bed diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java index 58b7ffddb..751a24871 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/SessionPlayerEntity.java @@ -33,6 +33,7 @@ import com.github.steveice10.mc.protocol.data.game.entity.metadata.type.ByteEnti import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.AttributeData; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; @@ -44,7 +45,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.AttributeUtils; import org.geysermc.geyser.util.DimensionUtils; -import javax.annotation.Nullable; import java.util.Collections; import java.util.List; import java.util.Map; @@ -112,7 +112,7 @@ public class SessionPlayerEntity extends PlayerEntity { /** * Sending any updated flags (sprinting, onFire, etc.) to the client while in spectator is not needed - * Also "fixes" https://github.com/GeyserMC/Geyser/issues/3318 + * Also "fixes" issue 3318 */ @Override public void setFlags(ByteEntityMetadata entityMetadata) { @@ -126,7 +126,7 @@ public class SessionPlayerEntity extends PlayerEntity { /** * Since 1.19.40, the client must be re-informed of its bounding box on respawn - * See https://github.com/GeyserMC/Geyser/issues/3370 + * See issue 3370 */ public void updateBoundingBox() { dirtyMetadata.put(EntityDataTypes.HEIGHT, getBoundingBoxHeight()); diff --git a/core/src/main/java/org/geysermc/geyser/erosion/AbstractGeyserboundPacketHandler.java b/core/src/main/java/org/geysermc/geyser/erosion/AbstractGeyserboundPacketHandler.java index eabed8f7b..b8363efc9 100644 --- a/core/src/main/java/org/geysermc/geyser/erosion/AbstractGeyserboundPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/erosion/AbstractGeyserboundPacketHandler.java @@ -25,9 +25,9 @@ package org.geysermc.geyser.erosion; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.erosion.packet.geyserbound.*; import org.geysermc.geyser.session.GeyserSession; -import org.jetbrains.annotations.Nullable; public abstract class AbstractGeyserboundPacketHandler implements GeyserboundPacketHandler { protected final GeyserSession session; diff --git a/core/src/main/java/org/geysermc/geyser/erosion/GeyserboundHandshakePacketHandler.java b/core/src/main/java/org/geysermc/geyser/erosion/GeyserboundHandshakePacketHandler.java index 196595383..0b4f03643 100644 --- a/core/src/main/java/org/geysermc/geyser/erosion/GeyserboundHandshakePacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/erosion/GeyserboundHandshakePacketHandler.java @@ -26,11 +26,11 @@ package org.geysermc.geyser.erosion; import io.netty.channel.Channel; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.erosion.netty.NettyPacketSender; import org.geysermc.erosion.packet.ErosionPacketHandler; import org.geysermc.erosion.packet.geyserbound.GeyserboundHandshakePacket; import org.geysermc.geyser.session.GeyserSession; -import org.jetbrains.annotations.Nullable; public final class GeyserboundHandshakePacketHandler extends AbstractGeyserboundPacketHandler { @@ -66,7 +66,7 @@ public final class GeyserboundHandshakePacketHandler extends AbstractGeyserbound } @Override - public ErosionPacketHandler setChannel(Channel channel) { + public @Nullable ErosionPacketHandler setChannel(Channel channel) { return null; } } diff --git a/core/src/main/java/org/geysermc/geyser/erosion/UnixSocketClientListener.java b/core/src/main/java/org/geysermc/geyser/erosion/UnixSocketClientListener.java index a236099df..1e00fe02c 100644 --- a/core/src/main/java/org/geysermc/geyser/erosion/UnixSocketClientListener.java +++ b/core/src/main/java/org/geysermc/geyser/erosion/UnixSocketClientListener.java @@ -31,6 +31,7 @@ import io.netty.channel.ChannelInitializer; import io.netty.channel.EventLoopGroup; import io.netty.channel.epoll.EpollDomainSocketChannel; import io.netty.channel.epoll.EpollEventLoopGroup; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.erosion.netty.impl.AbstractUnixSocketListener; import org.geysermc.erosion.packet.geyserbound.GeyserboundPacketHandler; @@ -49,9 +50,9 @@ public final class UnixSocketClientListener extends AbstractUnixSocketListener { initializeEventLoopGroup(); (new Bootstrap() .channel(EpollDomainSocketChannel.class) - .handler(new ChannelInitializer() { + .handler(new ChannelInitializer<>() { @Override - protected void initChannel(Channel ch) { + protected void initChannel(@NonNull Channel ch) { initPipeline(ch, handler); } }) diff --git a/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java b/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java index 9593e327e..d8657b612 100644 --- a/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java +++ b/core/src/main/java/org/geysermc/geyser/event/GeyserEventBus.java @@ -34,7 +34,6 @@ import org.geysermc.event.subscribe.Subscribe; import org.geysermc.geyser.api.event.EventBus; import org.geysermc.geyser.api.event.EventRegistrar; import org.geysermc.geyser.api.event.EventSubscriber; -import org.geysermc.geyser.api.extension.Extension; import java.util.Set; import java.util.function.BiConsumer; diff --git a/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java b/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java index d33de8cdd..ea2b73b5c 100644 --- a/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java +++ b/core/src/main/java/org/geysermc/geyser/event/GeyserEventSubscriber.java @@ -31,7 +31,6 @@ import org.geysermc.event.PostOrder; import org.geysermc.event.subscribe.impl.OwnedSubscriberImpl; import org.geysermc.geyser.api.event.EventRegistrar; import org.geysermc.geyser.api.event.ExtensionEventSubscriber; -import org.geysermc.geyser.api.extension.Extension; import java.util.function.BiConsumer; import java.util.function.Consumer; diff --git a/core/src/main/java/org/geysermc/geyser/event/type/GeyserBedrockPingEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/GeyserBedrockPingEventImpl.java index 579b4c68c..df1f16650 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/GeyserBedrockPingEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/GeyserBedrockPingEventImpl.java @@ -26,12 +26,11 @@ package org.geysermc.geyser.event.type; import org.checkerframework.checker.index.qual.NonNegative; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.BedrockPong; import org.geysermc.geyser.api.event.connection.GeyserBedrockPingEvent; -import org.jetbrains.annotations.NotNull; -import javax.annotation.Nonnull; import java.net.InetSocketAddress; import java.util.Objects; @@ -45,12 +44,12 @@ public class GeyserBedrockPingEventImpl implements GeyserBedrockPingEvent { } @Override - public void primaryMotd(@Nonnull String primary) { + public void primaryMotd(@NonNull String primary) { pong.motd(Objects.requireNonNull(primary, "Primary MOTD cannot be null")); } @Override - public void secondaryMotd(@Nonnull String secondary) { + public void secondaryMotd(@NonNull String secondary) { pong.subMotd(Objects.requireNonNull(secondary, "Secondary MOTD cannot be null")); } @@ -87,7 +86,7 @@ public class GeyserBedrockPingEventImpl implements GeyserBedrockPingEvent { } @Override - public @NotNull InetSocketAddress address() { + public @NonNull InetSocketAddress address() { return address; } } diff --git a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java index 65fd7ea0d..b9a059f19 100644 --- a/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java +++ b/core/src/main/java/org/geysermc/geyser/event/type/GeyserDefineCustomItemsEventImpl.java @@ -51,7 +51,7 @@ public abstract class GeyserDefineCustomItemsEventImpl implements GeyserDefineCu * @return a multimap of all the already registered custom items */ @Override - public Map> getExistingCustomItems() { + public @NonNull Map> getExistingCustomItems() { return Collections.unmodifiableMap(this.customItems.asMap()); } @@ -61,7 +61,7 @@ public abstract class GeyserDefineCustomItemsEventImpl implements GeyserDefineCu * @return the list of the already registered non-vanilla custom items */ @Override - public List getExistingNonVanillaCustomItems() { + public @NonNull List getExistingNonVanillaCustomItems() { return Collections.unmodifiableList(this.nonVanillaCustomItems); } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java index e99b901a4..9e0b83768 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/AnvilContainer.java @@ -29,12 +29,11 @@ import com.github.steveice10.mc.protocol.data.game.inventory.ContainerType; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundRenameItemPacket; import lombok.Getter; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.text.MessageTranslator; import org.geysermc.geyser.util.ItemUtils; -import javax.annotation.Nullable; - /** * Used to determine if rename packets should be sent and stores * the expected level cost for AnvilInventoryUpdater diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Container.java b/core/src/main/java/org/geysermc/geyser/inventory/Container.java index 569802a5a..79fa67da1 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Container.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Container.java @@ -27,12 +27,11 @@ package org.geysermc.geyser.inventory; import com.github.steveice10.mc.protocol.data.game.inventory.ContainerType; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.jetbrains.annotations.Range; -import javax.annotation.Nonnull; - /** * Combination of {@link Inventory} and {@link PlayerInventory} */ @@ -67,7 +66,7 @@ public class Container extends Inventory { } @Override - public void setItem(int slot, @Nonnull GeyserItemStack newItem, GeyserSession session) { + public void setItem(int slot, @NonNull GeyserItemStack newItem, GeyserSession session) { if (slot < this.size) { super.setItem(slot, newItem, session); } else { diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java b/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java index 8dbc9b722..6518dce7c 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Generic3X3Container.java @@ -33,7 +33,7 @@ import org.geysermc.geyser.translator.inventory.Generic3X3InventoryTranslator; public class Generic3X3Container extends Container { /** * Whether we need to set the container type as {@link org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType#DROPPER}. - * + *

* Used at {@link Generic3X3InventoryTranslator#openInventory(GeyserSession, Inventory)} */ @Getter diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java index d34ee2cbb..23365e392 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserEnchantOption.java @@ -40,7 +40,7 @@ import java.util.List; public class GeyserEnchantOption { private static final List EMPTY = Collections.emptyList(); /** - * This: https://cdn.discordapp.com/attachments/613168850925649981/791030657169227816/unknown.png + * This text * is controlled by the server. * So, of course, we have to throw in some easter eggs. ;) */ diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java index b159193e3..a67516c5c 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -28,18 +28,18 @@ package org.geysermc.geyser.inventory; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import lombok.AccessLevel; +import lombok.Data; import lombok.EqualsAndHashCode; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; -import lombok.Data; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.item.ItemTranslator; -import javax.annotation.Nonnull; - @Data public class GeyserItemStack { public static final GeyserItemStack EMPTY = new GeyserItemStack(0, 0, null); @@ -64,7 +64,7 @@ public class GeyserItemStack { this.netId = netId; } - public static @Nonnull GeyserItemStack from(ItemStack itemStack) { + public static @NonNull GeyserItemStack from(ItemStack itemStack) { return itemStack == null ? EMPTY : new GeyserItemStack(itemStack.getId(), itemStack.getAmount(), itemStack.getNbt()); } @@ -76,7 +76,7 @@ public class GeyserItemStack { return isEmpty() ? 0 : amount; } - public CompoundTag getNbt() { + public @Nullable CompoundTag getNbt() { return isEmpty() ? null : nbt; } @@ -96,7 +96,7 @@ public class GeyserItemStack { return getItemStack(amount); } - public ItemStack getItemStack(int newAmount) { + public @Nullable ItemStack getItemStack(int newAmount) { return isEmpty() ? null : new ItemStack(javaId, newAmount, nbt); } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java index 91e8c4e94..3376d6c26 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/Inventory.java @@ -29,6 +29,7 @@ import com.github.steveice10.mc.protocol.data.game.inventory.ContainerType; import com.github.steveice10.opennbt.tag.builtin.ByteTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3i; import lombok.Getter; import lombok.Setter; @@ -40,7 +41,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.item.ItemTranslator; import org.jetbrains.annotations.Range; -import javax.annotation.Nonnull; import java.util.Arrays; @ToString @@ -126,7 +126,7 @@ public abstract class Inventory { public abstract int getOffsetForHotbar(@Range(from = 0, to = 8) int slot); - public void setItem(int slot, @Nonnull GeyserItemStack newItem, GeyserSession session) { + public void setItem(int slot, @NonNull GeyserItemStack newItem, GeyserSession session) { if (slot > this.size) { session.getGeyser().getLogger().debug("Tried to set an item out of bounds! " + this); return; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java index 7b1064c8f..bda09a4ed 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/PlayerInventory.java @@ -28,12 +28,11 @@ package org.geysermc.geyser.inventory; import com.github.steveice10.mc.protocol.data.game.entity.player.Hand; import lombok.Getter; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.session.GeyserSession; import org.jetbrains.annotations.Range; -import javax.annotation.Nonnull; - public class PlayerInventory extends Inventory { /** * Stores the held item slot, starting at index 0. @@ -44,7 +43,7 @@ public class PlayerInventory extends Inventory { private int heldItemSlot; @Getter - @Nonnull + @NonNull private GeyserItemStack cursor = GeyserItemStack.EMPTY; public PlayerInventory() { @@ -57,12 +56,12 @@ public class PlayerInventory extends Inventory { return slot + 36; } - public void setCursor(@Nonnull GeyserItemStack newCursor, GeyserSession session) { + public void setCursor(@NonNull GeyserItemStack newCursor, GeyserSession session) { updateItemNetId(cursor, newCursor, session); cursor = newCursor; } - public GeyserItemStack getItemInHand(@Nonnull Hand hand) { + public GeyserItemStack getItemInHand(@NonNull Hand hand) { return hand == Hand.OFF_HAND ? getOffhand() : getItemInHand(); } @@ -74,7 +73,7 @@ public class PlayerInventory extends Inventory { return items[36 + heldItemSlot]; } - public void setItemInHand(@Nonnull GeyserItemStack item) { + public void setItemInHand(@NonNull GeyserItemStack item) { if (36 + heldItemSlot > this.size) { GeyserImpl.getInstance().getLogger().debug("Held item slot was larger than expected!"); return; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java index 6e04e6741..f99a0c71e 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/StonecutterContainer.java @@ -27,8 +27,8 @@ package org.geysermc.geyser.inventory; import com.github.steveice10.mc.protocol.data.game.inventory.ContainerType; import lombok.Getter; -import lombok.NonNull; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.GeyserSession; public class StonecutterContainer extends Container { diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java b/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java index bcbfe3e17..5fa2a5784 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/Enchantment.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.inventory.item; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.Locale; @@ -78,7 +79,7 @@ public enum Enchantment { this.javaIdentifier = "minecraft:" + this.name().toLowerCase(Locale.ENGLISH); } - public static Enchantment getByJavaIdentifier(String javaIdentifier) { + public static @Nullable Enchantment getByJavaIdentifier(String javaIdentifier) { for (Enchantment enchantment : VALUES) { if (enchantment.javaIdentifier.equals(javaIdentifier) || enchantment.name().toLowerCase(Locale.ENGLISH).equalsIgnoreCase(javaIdentifier)) { return enchantment; @@ -87,7 +88,7 @@ public enum Enchantment { return null; } - public static Enchantment getByBedrockId(int bedrockId) { + public static @Nullable Enchantment getByBedrockId(int bedrockId) { if (bedrockId >= 0 && bedrockId < VALUES.length) { return VALUES[bedrockId]; } @@ -149,7 +150,7 @@ public enum Enchantment { */ public static final String[] ALL_JAVA_IDENTIFIERS; - public static JavaEnchantment getByJavaIdentifier(String javaIdentifier) { + public static @Nullable JavaEnchantment getByJavaIdentifier(String javaIdentifier) { if (!javaIdentifier.startsWith("minecraft:")) { javaIdentifier = "minecraft:" + javaIdentifier; } diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java b/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java index 8d2b52aa2..7ce0ee278 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/Potion.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.inventory.item; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.Locale; @@ -84,7 +85,7 @@ public enum Potion { this.bedrockId = (short) bedrockId; } - public static Potion getByJavaIdentifier(String javaIdentifier) { + public static @Nullable Potion getByJavaIdentifier(String javaIdentifier) { for (Potion potion : VALUES) { if (potion.javaIdentifier.equals(javaIdentifier)) { return potion; @@ -93,7 +94,7 @@ public enum Potion { return null; } - public static Potion getByBedrockId(int bedrockId) { + public static @Nullable Potion getByBedrockId(int bedrockId) { for (Potion potion : VALUES) { if (potion.bedrockId == bedrockId) { return potion; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java b/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java index 16fd7cde6..6bb786896 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/StoredItemMappings.java @@ -27,11 +27,11 @@ package org.geysermc.geyser.inventory.item; import lombok.Getter; import lombok.experimental.Accessors; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.type.ItemMapping; -import javax.annotation.Nonnull; import java.util.Map; /** @@ -70,7 +70,7 @@ public class StoredItemMappings { this.writableBook = load(itemMappings, Items.WRITABLE_BOOK); } - @Nonnull + @NonNull private ItemMapping load(Map itemMappings, Item item) { ItemMapping mapping = itemMappings.get(item); if (mapping == null) { diff --git a/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java b/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java index e45667fe2..3ba0ad56f 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/item/TippedArrowPotion.java @@ -26,12 +26,13 @@ package org.geysermc.geyser.inventory.item; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.Locale; /** * Potion identifiers and their respective Bedrock IDs used with arrows. - * https://minecraft.wiki/w/Arrow#Data_values + * See here */ @Getter public enum TippedArrowPotion { @@ -93,7 +94,7 @@ public enum TippedArrowPotion { this.javaColor = arrowParticleColor.getColor(); } - public static TippedArrowPotion getByJavaIdentifier(String javaIdentifier) { + public static @Nullable TippedArrowPotion getByJavaIdentifier(String javaIdentifier) { for (TippedArrowPotion potion : VALUES) { if (potion.javaIdentifier.equals(javaIdentifier)) { return potion; @@ -102,7 +103,7 @@ public enum TippedArrowPotion { return null; } - public static TippedArrowPotion getByBedrockId(int bedrockId) { + public static @Nullable TippedArrowPotion getByBedrockId(int bedrockId) { for (TippedArrowPotion potion : VALUES) { if (potion.bedrockId == bedrockId) { return potion; @@ -115,7 +116,7 @@ public enum TippedArrowPotion { * @param color the potion color to look up * @return the tipped arrow potion that most closely resembles that color. */ - public static TippedArrowPotion getByJavaColor(int color) { + public static @Nullable TippedArrowPotion getByJavaColor(int color) { for (TippedArrowPotion potion : VALUES) { if (potion.javaColor == color) { return potion; diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java index aa7897038..5adee0c20 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/AnvilInventoryUpdater.java @@ -64,7 +64,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { super.updateInventory(translator, session, inventory); AnvilContainer anvilContainer = (AnvilContainer) inventory; updateInventoryState(session, anvilContainer); - int targetSlot = getTargetSlot(session, anvilContainer); + int targetSlot = getTargetSlot(anvilContainer); for (int i = 0; i < translator.size; i++) { final int bedrockSlot = translator.javaSlotToBedrock(i); if (bedrockSlot == 50) @@ -89,7 +89,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { updateInventoryState(session, anvilContainer); int lastTargetSlot = anvilContainer.getLastTargetSlot(); - int targetSlot = getTargetSlot(session, anvilContainer); + int targetSlot = getTargetSlot(anvilContainer); if (targetSlot != javaSlot) { // Update the requested slot InventorySlotPacket slotPacket = new InventorySlotPacket(); @@ -136,7 +136,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { * @param anvilContainer the anvil inventory * @return the slot to change the repair cost */ - private int getTargetSlot(GeyserSession session, AnvilContainer anvilContainer) { + private int getTargetSlot(AnvilContainer anvilContainer) { GeyserItemStack input = anvilContainer.getInput(); GeyserItemStack material = anvilContainer.getMaterial(); @@ -433,6 +433,7 @@ public class AnvilInventoryUpdater extends InventoryUpdater { return !Objects.equals(originalName, ItemUtils.getCustomName(anvilContainer.getResult().getNbt())); } + @SuppressWarnings("SameParameterValue") private int getTagIntValueOr(GeyserItemStack itemStack, String tagName, int defaultValue) { if (itemStack.getNbt() != null) { Tag tag = itemStack.getNbt().get(tagName); diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java index cebad261e..1434c49d9 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java @@ -30,15 +30,13 @@ import org.geysermc.geyser.api.util.TriState; import java.util.OptionalInt; +@SuppressWarnings("OptionalUsedAsFieldOrParameterType") public record GeyserCustomItemOptions(TriState unbreakable, OptionalInt customModelData, OptionalInt damagePredicate, boolean defaultItem) implements CustomItemOptions { - public GeyserCustomItemOptions(TriState unbreakable, OptionalInt customModelData, OptionalInt damagePredicate) { - this(unbreakable, customModelData, damagePredicate, false); - } - + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") public static class CustomItemOptionsBuilder implements CustomItemOptions.Builder { private TriState unbreakable = TriState.NOT_SET; private OptionalInt customModelData = OptionalInt.empty(); diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java index 37bf9e02c..d71f2e548 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomMappingData.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.item; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ComponentItemData; -import org.cloudburstmc.protocol.bedrock.packet.StartGamePacket; public record GeyserCustomMappingData(ComponentItemData componentItemData, ItemDefinition itemDefinition, String stringId, int integerId) { } diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java index 47b5aed33..52b0ee7d0 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java @@ -32,11 +32,11 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; -import org.jetbrains.annotations.NotNull; import java.util.OptionalInt; import java.util.Set; +@SuppressWarnings("OptionalUsedAsFieldOrParameterType") @EqualsAndHashCode(callSuper = true) @ToString public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData implements NonVanillaCustomItemData { @@ -84,7 +84,7 @@ public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData i } @Override - public @NotNull String identifier() { + public @NonNull String identifier() { return identifier; } @@ -134,7 +134,7 @@ public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData i } @Override - public @NotNull OptionalInt creativeCategory() { + public @NonNull OptionalInt creativeCategory() { return creativeCategory; } diff --git a/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java b/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java index ee144acc6..8484eb185 100644 --- a/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java +++ b/core/src/main/java/org/geysermc/geyser/item/components/ToolTier.java @@ -26,7 +26,6 @@ package org.geysermc.geyser.item.components; import com.google.common.base.Suppliers; -import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; @@ -66,14 +65,4 @@ public enum ToolTier { public String toString() { return this.name().toLowerCase(Locale.ROOT); } - - public static ToolTier getByName(@NonNull String name) { - String upperCase = name.toUpperCase(Locale.ROOT); - for (ToolTier tier : VALUES) { - if (tier.name().equals(upperCase)) { - return tier; - } - } - return null; - } } diff --git a/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java b/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java index 5878f5cc7..99ca463d7 100644 --- a/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java +++ b/core/src/main/java/org/geysermc/geyser/item/exception/InvalidCustomMappingsFileException.java @@ -25,16 +25,14 @@ package org.geysermc.geyser.item.exception; +import java.io.Serial; + public class InvalidCustomMappingsFileException extends Exception { - public InvalidCustomMappingsFileException(Throwable cause) { - super(cause); - } + + @Serial + private static final long serialVersionUID = 1L; public InvalidCustomMappingsFileException(String message) { super(message); } - - public InvalidCustomMappingsFileException(String message, Throwable cause) { - super(message, cause); - } } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java index 9a93eeac8..938d4a79a 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/ArrowItem.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.StringTag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.inventory.item.TippedArrowPotion; import org.geysermc.geyser.item.Items; @@ -38,7 +39,8 @@ public class ArrowItem extends Item { super(javaIdentifier, builder); } - public ItemStack translateToJava(ItemData itemData, ItemMapping mapping, ItemMappings mappings) { + @Override + public @NonNull ItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { TippedArrowPotion tippedArrowPotion = TippedArrowPotion.getByBedrockId(itemData.getDamage()); ItemStack itemStack = super.translateToJava(itemData, mapping, mappings); if (tippedArrowPotion != null) { diff --git a/core/src/main/java/org/geysermc/geyser/item/type/AxolotlBucketItem.java b/core/src/main/java/org/geysermc/geyser/item/type/AxolotlBucketItem.java index cd53cf904..81d7bf116 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/AxolotlBucketItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/AxolotlBucketItem.java @@ -28,9 +28,9 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.ByteTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.MinecraftLocale; -import org.jetbrains.annotations.NotNull; public class AxolotlBucketItem extends Item { public AxolotlBucketItem(String javaIdentifier, Builder builder) { @@ -38,7 +38,7 @@ public class AxolotlBucketItem extends Item { } @Override - public void translateNbtToBedrock(@NotNull GeyserSession session, @NotNull CompoundTag tag) { + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag) { super.translateNbtToBedrock(session, tag); // Bedrock Edition displays the properties of the axolotl. Java does not. diff --git a/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java b/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java index 920f9e168..344668836 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/BannerItem.java @@ -29,14 +29,13 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.nbt.NbtList; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtType; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; -import org.jetbrains.annotations.NotNull; -import javax.annotation.Nonnull; import java.util.ArrayList; import java.util.List; @@ -45,7 +44,7 @@ import static org.geysermc.erosion.util.BannerUtils.getJavaPatternTag; public class BannerItem extends BlockItem { /** * Holds what a Java ominous banner pattern looks like. - * + *

* Translating the patterns over to Bedrock does not work effectively, but Bedrock has a dedicated type for * ominous banners that we set instead. This variable is used to detect Java ominous banner patterns, and apply * the correct ominous banner pattern if Bedrock pulls the item from creative. @@ -86,7 +85,7 @@ public class BannerItem extends BlockItem { * @param pattern Java edition pattern nbt * @return The Bedrock edition format pattern nbt */ - @Nonnull + @NonNull private static NbtMap getBedrockBannerPattern(CompoundTag pattern) { return NbtMap.builder() .putInt("Color", 15 - (int) pattern.get("Color").getValue()) @@ -121,7 +120,7 @@ public class BannerItem extends BlockItem { } @Override - public void translateNbtToBedrock(@NotNull GeyserSession session, @NotNull CompoundTag tag) { + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag) { super.translateNbtToBedrock(session, tag); CompoundTag blockEntityTag = tag.remove("BlockEntityTag"); @@ -137,7 +136,7 @@ public class BannerItem extends BlockItem { } @Override - public void translateNbtToJava(@NotNull CompoundTag tag, @NotNull ItemMapping mapping) { + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { super.translateNbtToJava(tag, mapping); if (tag.get("Type") instanceof IntTag type && type.getValue() == 1) { diff --git a/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java b/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java index d1ed6f6b8..87da96447 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/CompassItem.java @@ -30,6 +30,7 @@ import com.github.steveice10.opennbt.tag.builtin.ByteTag; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.ItemMappings; @@ -57,7 +58,7 @@ public class CompassItem extends Item { } @Override - public void translateNbtToBedrock(GeyserSession session, CompoundTag tag) { + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag) { super.translateNbtToBedrock(session, tag); Tag lodestoneTag = tag.get("LodestoneTracked"); @@ -77,7 +78,7 @@ public class CompassItem extends Item { } @Override - public ItemStack translateToJava(ItemData itemData, ItemMapping mapping, ItemMappings mappings) { + public @NonNull ItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { if (mapping.getBedrockIdentifier().equals("minecraft:lodestone_compass")) { // Revert the entry back to the compass mapping = mappings.getStoredItems().compass(); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java b/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java index 756cd69ba..e409dccfb 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/CrossbowItem.java @@ -28,11 +28,11 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.*; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.inventory.item.ItemTranslator; -import org.jetbrains.annotations.Nullable; public class CrossbowItem extends Item { public CrossbowItem(String javaIdentifier, Builder builder) { diff --git a/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java b/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java index f7743e430..ac0751c73 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/EnchantedBookItem.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.GeyserSession; import java.util.ArrayList; @@ -39,7 +40,7 @@ public class EnchantedBookItem extends Item { } @Override - public void translateNbtToBedrock(GeyserSession session, CompoundTag tag) { + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag) { super.translateNbtToBedrock(session, tag); List newTags = new ArrayList<>(); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/FishingRodItem.java b/core/src/main/java/org/geysermc/geyser/item/type/FishingRodItem.java index 96241deb3..f63a1ec5a 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/FishingRodItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/FishingRodItem.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.GeyserSession; public class FishingRodItem extends Item { @@ -36,7 +37,7 @@ public class FishingRodItem extends Item { } @Override - public void translateNbtToBedrock(GeyserSession session, CompoundTag tag) { + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag) { super.translateNbtToBedrock(session, tag); // Fix damage inconsistency diff --git a/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java b/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java index 4c21be833..aacb906c9 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/GoatHornItem.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.StringTag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.registry.type.ItemMapping; @@ -71,7 +72,7 @@ public class GoatHornItem extends Item { } @Override - public ItemStack translateToJava(ItemData itemData, ItemMapping mapping, ItemMappings mappings) { + public @NonNull ItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { ItemStack itemStack = super.translateToJava(itemData, mapping, mappings); int damage = itemData.getDamage(); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/Item.java b/core/src/main/java/org/geysermc/geyser/item/type/Item.java index eef02ff0e..a7a59f6af 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/Item.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/Item.java @@ -29,6 +29,7 @@ import com.github.steveice10.mc.protocol.data.game.Identifier; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.*; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.inventory.item.Enchantment; @@ -99,8 +100,7 @@ public class Item { return builder; } - public ItemStack translateToJava(ItemData itemData, ItemMapping mapping, ItemMappings mappings) { - if (itemData == null) return null; + public @NonNull ItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { if (itemData.getTag() == null) { return new ItemStack(javaId, itemData.getCount(), new CompoundTag("")); } @@ -206,7 +206,7 @@ public class Item { } } - protected final CompoundTag remapEnchantment(GeyserSession session, CompoundTag tag, CompoundTag rootTag) { + protected final @Nullable CompoundTag remapEnchantment(GeyserSession session, CompoundTag tag, CompoundTag rootTag) { Tag javaEnchId = tag.get("id"); if (!(javaEnchId instanceof StringTag)) return null; diff --git a/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java b/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java index cd63a3799..4405b66ad 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/MapItem.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.opennbt.tag.builtin.*; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; @@ -35,7 +36,7 @@ public class MapItem extends Item { } @Override - public void translateNbtToBedrock(GeyserSession session, CompoundTag tag) { + public void translateNbtToBedrock(@NonNull GeyserSession session, @NonNull CompoundTag tag) { super.translateNbtToBedrock(session, tag); Tag mapId = tag.remove("map"); @@ -49,7 +50,7 @@ public class MapItem extends Item { } @Override - public void translateNbtToJava(CompoundTag tag, ItemMapping mapping) { + public void translateNbtToJava(@NonNull CompoundTag tag, @NonNull ItemMapping mapping) { super.translateNbtToJava(tag, mapping); IntTag mapNameIndex = tag.remove("map_name_index"); diff --git a/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java b/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java index 359639437..24dd56ef2 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/PotionItem.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.item.type; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; import org.geysermc.geyser.GeyserImpl; @@ -69,7 +70,7 @@ public class PotionItem extends Item { } @Override - public ItemStack translateToJava(ItemData itemData, ItemMapping mapping, ItemMappings mappings) { + public @NonNull ItemStack translateToJava(@NonNull ItemData itemData, @NonNull ItemMapping mapping, @NonNull ItemMappings mappings) { Potion potion = Potion.getByBedrockId(itemData.getDamage()); ItemStack itemStack = super.translateToJava(itemData, mapping, mappings); if (potion != null) { diff --git a/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java b/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java index 9bb317996..eac8aca09 100644 --- a/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java +++ b/core/src/main/java/org/geysermc/geyser/level/BedrockMapIcon.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.level; import com.github.steveice10.mc.protocol.data.game.level.map.MapIconType; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.Nullable; public enum BedrockMapIcon { ICON_WHITE_ARROW(MapIconType.WHITE_ARROW, 0), @@ -87,7 +88,7 @@ public enum BedrockMapIcon { * @param iconType A MapIconType * @return The mapping for a BedrockMapIcon */ - public static BedrockMapIcon fromType(MapIconType iconType) { + public static @Nullable BedrockMapIcon fromType(MapIconType iconType) { for (BedrockMapIcon icon : VALUES) { if (icon.iconType.equals(iconType)) { return icon; diff --git a/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java b/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java index e005ab2d8..2ee8509a0 100644 --- a/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java +++ b/core/src/main/java/org/geysermc/geyser/level/FireworkColor.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.level; import net.kyori.adventure.text.format.TextColor; import net.kyori.adventure.util.HSVLike; +import org.checkerframework.checker.nullness.qual.NonNull; public enum FireworkColor { BLACK(1973019), @@ -75,7 +76,7 @@ public enum FireworkColor { * @return nearest named color. will always return a value * @since 4.0.0 */ - private static FireworkColor nearestTo(final HSVLike any) { + private static @NonNull FireworkColor nearestTo(final HSVLike any) { float matchedDistance = Float.MAX_VALUE; FireworkColor match = VALUES[0]; for (final FireworkColor potential : VALUES) { diff --git a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java index 936248afe..e09cad19c 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java @@ -26,7 +26,7 @@ package org.geysermc.geyser.level; import com.github.steveice10.mc.protocol.data.game.advancement.Advancement; -import lombok.NonNull; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.cache.AdvancementsCache; import org.geysermc.geyser.text.ChatColor; @@ -73,7 +73,7 @@ public class GeyserAdvancement { return displayData != null && displayData.getFrameType() == Advancement.DisplayData.FrameType.CHALLENGE ? ChatColor.LIGHT_PURPLE : ChatColor.GREEN; } - public String getRootId(AdvancementsCache advancementsCache) { + public @NonNull String getRootId(AdvancementsCache advancementsCache) { if (rootId == null) { if (this.advancement.getParentId() == null) { // We are the root ID diff --git a/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java b/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java index a8e2d00ae..44c3b94b3 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserWorldManager.java @@ -31,6 +31,8 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -39,9 +41,7 @@ import org.geysermc.erosion.util.BlockPositionIterator; import org.geysermc.erosion.util.LecternUtils; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.BlockEntityUtils; -import org.jetbrains.annotations.Nullable; -import javax.annotation.Nonnull; import java.util.List; import java.util.concurrent.CompletableFuture; @@ -99,6 +99,7 @@ public class GeyserWorldManager extends WorldManager { return; } List vectors = new ObjectArrayList<>(blockEntityInfos.size()); + //noinspection ForLoopReplaceableByForEach - avoid constructing iterator for (int i = 0; i < blockEntityInfos.size(); i++) { BlockEntityInfo info = blockEntityInfos.get(i); vectors.add(Vector3i.from(info.getX(), info.getY(), info.getZ())); @@ -171,7 +172,7 @@ public class GeyserWorldManager extends WorldManager { return false; } - @Nonnull + @NonNull @Override public CompletableFuture<@Nullable CompoundTag> getPickItemNbt(GeyserSession session, int x, int y, int z, boolean addNbtData) { var erosionHandler = session.getErosionHandler().getAsActive(); diff --git a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java index a4de993d2..be7e2c139 100644 --- a/core/src/main/java/org/geysermc/geyser/level/WorldManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/WorldManager.java @@ -29,12 +29,12 @@ import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode; import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityInfo; import com.github.steveice10.mc.protocol.data.game.setting.Difficulty; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.geysermc.erosion.util.BlockPositionIterator; import org.geysermc.geyser.session.GeyserSession; -import org.jetbrains.annotations.Nullable; -import javax.annotation.Nonnull; import java.util.List; import java.util.Locale; import java.util.concurrent.CompletableFuture; @@ -107,7 +107,7 @@ public abstract class WorldManager { * * We solve this problem by querying all loaded lecterns, where possible, and sending their information in a block entity * tag. - * + *

* Note that the lectern data may be sent asynchronously. * * @param session the session of the player @@ -210,8 +210,7 @@ public abstract class WorldManager { /** * Returns a list of biome identifiers available on the server. */ - @Nullable - public String[] getBiomeIdentifiers(boolean withTags) { + public String @Nullable [] getBiomeIdentifiers(boolean withTags) { return null; } @@ -220,7 +219,7 @@ public abstract class WorldManager { * * @return expected NBT for this item. */ - @Nonnull + @NonNull public CompletableFuture<@Nullable CompoundTag> getPickItemNbt(GeyserSession session, int x, int y, int z, boolean addNbtData) { return CompletableFuture.completedFuture(null); } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java b/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java index 8024af650..97c861df7 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/DoubleChestValue.java @@ -27,19 +27,14 @@ package org.geysermc.geyser.level.block; /** * This stores all values of double chests that are part of the Java block state. + * + * @param isFacingEast If true, then chest is facing east/west; if false, south/north + * @param isDirectionPositive If true, direction is positive (east/south); if false, direction is negative (west/north) + * @param isLeft If true, chest is the left of a pair; if false, chest is the right of a pair. */ public record DoubleChestValue( - /** - * If true, then chest is facing east/west; if false, south/north - */ boolean isFacingEast, - /** - * If true, direction is positive (east/south); if false, direction is negative (west/north) - */ boolean isDirectionPositive, - /** - * If true, chest is the left of a pair; if false, chest is the right of a pair. - */ boolean isLeft) { } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index 413a4d1ed..dd58ebcb7 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.level.block; import it.unimi.dsi.fastutil.objects.*; import lombok.RequiredArgsConstructor; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; @@ -37,9 +38,6 @@ import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.util.CreativeCategory; -import org.jetbrains.annotations.NotNull; - -import javax.annotation.Nullable; import java.util.List; import java.util.Map; @@ -142,7 +140,7 @@ public class GeyserCustomBlockData implements CustomBlockData { } @Override - public CustomBlockState.@NotNull Builder blockStateBuilder() { + public CustomBlockState.@NonNull Builder blockStateBuilder() { return new GeyserCustomBlockState.CustomBlockStateBuilder(this); } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java index 576bd9743..d147ffedc 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java @@ -54,7 +54,7 @@ public class GeyserCustomBlockState implements CustomBlockState { @SuppressWarnings("unchecked") @Override - public @NonNull T property(String propertyName) { + public @NonNull T property(@NonNull String propertyName) { return (T) properties.get(propertyName); } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java index 725afe6df..5604a543e 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java @@ -52,7 +52,7 @@ public class GeyserJavaBlockState implements JavaBlockState { } @Override - public @NonNull boolean waterlogged() { + public boolean waterlogged() { return waterlogged; } @@ -62,7 +62,7 @@ public class GeyserJavaBlockState implements JavaBlockState { } @Override - public @NonNull boolean canBreakWithHand() { + public boolean canBreakWithHand() { return canBreakWithHand; } @@ -77,7 +77,7 @@ public class GeyserJavaBlockState implements JavaBlockState { } @Override - public @Nullable boolean hasBlockEntity() { + public boolean hasBlockEntity() { return hasBlockEntity; } @@ -118,7 +118,7 @@ public class GeyserJavaBlockState implements JavaBlockState { } @Override - public Builder waterlogged(@NonNull boolean waterlogged) { + public Builder waterlogged(boolean waterlogged) { this.waterlogged = waterlogged; return this; } @@ -130,7 +130,7 @@ public class GeyserJavaBlockState implements JavaBlockState { } @Override - public Builder canBreakWithHand(@NonNull boolean canBreakWithHand) { + public Builder canBreakWithHand(boolean canBreakWithHand) { this.canBreakWithHand = canBreakWithHand; return this; } @@ -148,7 +148,7 @@ public class GeyserJavaBlockState implements JavaBlockState { } @Override - public Builder hasBlockEntity(@Nullable boolean hasBlockEntity) { + public Builder hasBlockEntity(boolean hasBlockEntity) { this.hasBlockEntity = hasBlockEntity; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java index d95767b97..fbfd82144 100644 --- a/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java +++ b/core/src/main/java/org/geysermc/geyser/level/chunk/bitarray/BitArrayVersion.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.level.chunk.bitarray; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.util.MathUtils; public enum BitArrayVersion { @@ -61,7 +62,7 @@ public enum BitArrayVersion { throw new IllegalArgumentException("Invalid palette version: " + version); } - public static BitArrayVersion forBitsCeil(int bits) { + public static @Nullable BitArrayVersion forBitsCeil(int bits) { for (int i = VALUES.length - 1; i >= 0; i--) { BitArrayVersion version = VALUES[i]; if (version.bits >= bits) { @@ -79,10 +80,6 @@ public enum BitArrayVersion { return maxEntryValue; } - public int getWordsForSize(int size) { - return MathUtils.ceil((float) size / entriesPerWord); - } - public BitArrayVersion next() { return next; } diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java index b983da8b4..2c3da3c41 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/CollisionManager.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.level.physics; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.GenericMath; import org.cloudburstmc.math.vector.Vector3d; import org.cloudburstmc.math.vector.Vector3f; @@ -133,7 +134,7 @@ public class CollisionManager { * @param teleported whether the Bedrock player has teleported to a new position. If true, movement correction is skipped. * @return the position to send to the Java server, or null to cancel sending the packet */ - public Vector3d adjustBedrockPosition(Vector3f bedrockPosition, boolean onGround, boolean teleported) { + public @Nullable Vector3d adjustBedrockPosition(Vector3f bedrockPosition, boolean onGround, boolean teleported) { PistonCache pistonCache = session.getPistonCache(); // Bedrock clients tend to fall off of honey blocks, so we need to teleport them to the new position if (pistonCache.isPlayerAttachedToHoney()) { diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java index fa5201db9..09ff89800 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/Direction.java @@ -25,10 +25,9 @@ package org.geysermc.geyser.level.physics; -import org.cloudburstmc.math.vector.Vector3i; import lombok.Getter; - -import javax.annotation.Nonnull; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.cloudburstmc.math.vector.Vector3i; public enum Direction { DOWN(1, Vector3i.from(0, -1, 0), Axis.Y, com.github.steveice10.mc.protocol.data.game.entity.object.Direction.DOWN), @@ -66,8 +65,7 @@ public enum Direction { return axis == Axis.X || axis == Axis.Z; } - @Nonnull - public static Direction fromPistonValue(com.github.steveice10.mc.protocol.data.game.entity.object.Direction pistonValue) { + public static @NonNull Direction fromPistonValue(com.github.steveice10.mc.protocol.data.game.entity.object.Direction pistonValue) { for (Direction direction : VALUES) { if (direction.pistonValue == pistonValue) { return direction; diff --git a/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java b/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java index a6b25d01e..fa28e7cb8 100644 --- a/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java +++ b/core/src/main/java/org/geysermc/geyser/level/physics/PistonBehavior.java @@ -25,6 +25,8 @@ package org.geysermc.geyser.level.physics; +import org.checkerframework.checker.nullness.qual.NonNull; + import java.util.Locale; public enum PistonBehavior { @@ -35,7 +37,7 @@ public enum PistonBehavior { private static final PistonBehavior[] VALUES = values(); - public static PistonBehavior getByName(String name) { + public static @NonNull PistonBehavior getByName(String name) { String upperCase = name.toUpperCase(Locale.ROOT); for (PistonBehavior type : VALUES) { if (type.name().equals(upperCase)) { diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index 4ffdbcf48..11c7bc11e 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.network; import com.github.steveice10.mc.protocol.codec.MinecraftCodec; import com.github.steveice10.mc.protocol.codec.PacketCodec; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; @@ -82,7 +83,7 @@ public final class GameProtocol { * @param protocolVersion The protocol version to attempt to find * @return The packet codec, or null if the client's protocol is unsupported */ - public static BedrockCodec getBedrockCodec(int protocolVersion) { + public static @Nullable BedrockCodec getBedrockCodec(int protocolVersion) { for (BedrockCodec packetCodec : SUPPORTED_BEDROCK_CODECS) { if (packetCodec.getProtocolVersion() == protocolVersion) { return packetCodec; diff --git a/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java b/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java index f19a46e6a..bb8e87440 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java +++ b/core/src/main/java/org/geysermc/geyser/network/GeyserServerInitializer.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.network; import io.netty.channel.Channel; import io.netty.channel.DefaultEventLoopGroup; import io.netty.util.concurrent.DefaultThreadFactory; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.BedrockPeer; import org.cloudburstmc.protocol.bedrock.BedrockServerSession; import org.cloudburstmc.protocol.bedrock.netty.initializer.BedrockServerInitializer; @@ -35,7 +36,6 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.event.bedrock.SessionInitializeEvent; import org.geysermc.geyser.session.GeyserSession; -import javax.annotation.Nonnull; import java.net.InetSocketAddress; public class GeyserServerInitializer extends BedrockServerInitializer { @@ -52,7 +52,7 @@ public class GeyserServerInitializer extends BedrockServerInitializer { } @Override - public void initSession(@Nonnull BedrockServerSession bedrockServerSession) { + public void initSession(@NonNull BedrockServerSession bedrockServerSession) { try { if (this.geyser.getGeyserServer().getProxiedAddresses() != null) { InetSocketAddress address = this.geyser.getGeyserServer().getProxiedAddresses().get((InetSocketAddress) bedrockServerSession.getSocketAddress()); diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java b/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java index 26015a96f..a756c70eb 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/ChannelWrapper.java @@ -29,6 +29,7 @@ import io.netty.buffer.ByteBufAllocator; import io.netty.channel.*; import io.netty.util.Attribute; import io.netty.util.AttributeKey; +import org.checkerframework.checker.nullness.qual.NonNull; import java.net.SocketAddress; @@ -259,7 +260,7 @@ public class ChannelWrapper implements Channel { } @Override - public int compareTo(Channel o) { + public int compareTo(@NonNull Channel o) { return source.compareTo(o); } } diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java index 258fa69eb..53221274f 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalChannelWrapper.java @@ -30,25 +30,20 @@ import io.netty.channel.local.LocalChannel; import io.netty.channel.local.LocalServerChannel; import java.net.InetSocketAddress; +import java.util.Objects; public class LocalChannelWrapper extends LocalChannel { + private final ChannelWrapper wrapper; + /** * {@link #newChannelPipeline()} is called during super, so this exists until the wrapper can be initialized. */ private volatile ChannelWrapper tempWrapper; - public LocalChannelWrapper() { - wrapper = new ChannelWrapper(this); - } - public LocalChannelWrapper(LocalServerChannel parent, LocalChannel peer) { super(parent, peer); - if (tempWrapper == null) { - this.wrapper = new ChannelWrapper(this); - } else { - this.wrapper = tempWrapper; - } + this.wrapper = Objects.requireNonNullElseGet(tempWrapper, () -> new ChannelWrapper(this)); wrapper.remoteAddress(new InetSocketAddress(0)); } diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java b/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java index 551bc1deb..a2951116f 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/LocalSession.java @@ -37,6 +37,7 @@ import io.netty.buffer.ByteBufAllocator; import io.netty.channel.*; import io.netty.channel.unix.PreferredDirectByteBufAllocator; import io.netty.handler.codec.haproxy.*; +import org.checkerframework.checker.nullness.qual.NonNull; import java.net.Inet4Address; import java.net.InetSocketAddress; @@ -75,7 +76,7 @@ public final class LocalSession extends TcpSession { bootstrap.channel(LocalChannelWithRemoteAddress.class); bootstrap.handler(new ChannelInitializer() { @Override - public void initChannel(LocalChannelWithRemoteAddress channel) { + public void initChannel(@NonNull LocalChannelWithRemoteAddress channel) { channel.spoofedRemoteAddress(new InetSocketAddress(clientIp, 0)); PacketProtocol protocol = getPacketProtocol(); protocol.newClientSession(LocalSession.this); @@ -119,7 +120,7 @@ public final class LocalSession extends TcpSession { if (getFlag(BuiltinFlags.ENABLE_CLIENT_PROXY_PROTOCOL, false) && clientAddress != null) { pipeline.addFirst("proxy-protocol-packet-sender", new ChannelInboundHandlerAdapter() { @Override - public void channelActive(ChannelHandlerContext ctx) throws Exception { + public void channelActive(@NonNull ChannelHandlerContext ctx) throws Exception { HAProxyProxiedProtocol proxiedProtocol = clientAddress.getAddress() instanceof Inet4Address ? HAProxyProxiedProtocol.TCP4 : HAProxyProxiedProtocol.TCP6; InetSocketAddress remoteAddress; if (ctx.channel().remoteAddress() instanceof InetSocketAddress) { diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakConnectionRequestHandler.java b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakConnectionRequestHandler.java index 8c0412240..26bda9f2b 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakConnectionRequestHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakConnectionRequestHandler.java @@ -49,7 +49,7 @@ public class RakConnectionRequestHandler extends ChannelInboundHandlerAdapter { private final GeyserServer server; @Override - public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) throws Exception { + public void channelRead(@NonNull ChannelHandlerContext ctx, @NonNull Object msg) { if (!(msg instanceof DatagramPacket packet)) { ctx.fireChannelRead(msg); return; diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/proxy/ProxyProtocolDecoder.java b/core/src/main/java/org/geysermc/geyser/network/netty/proxy/ProxyProtocolDecoder.java index b14006336..67fb3ecdd 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/proxy/ProxyProtocolDecoder.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/proxy/ProxyProtocolDecoder.java @@ -30,6 +30,7 @@ import io.netty.handler.codec.ProtocolDetectionResult; import io.netty.handler.codec.haproxy.*; import io.netty.util.ByteProcessor; import io.netty.util.CharsetUtil; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.Objects; @@ -75,7 +76,7 @@ public final class ProxyProtocolDecoder { /** * Protocol specification version */ - private int decodingVersion = -1; + private final int decodingVersion; /** * The latest v2 spec (2014/05/18) allows for additional data to be sent in the proxy protocol header beyond the @@ -87,7 +88,7 @@ public final class ProxyProtocolDecoder { this.decodingVersion = version; } - public static HAProxyMessage decode(ByteBuf packet, int version) { + public static @Nullable HAProxyMessage decode(ByteBuf packet, int version) { if (version == -1) { return null; } @@ -95,7 +96,7 @@ public final class ProxyProtocolDecoder { return decoder.decodeHeader(packet); } - private HAProxyMessage decodeHeader(ByteBuf in) { + private @Nullable HAProxyMessage decodeHeader(ByteBuf in) { final ByteBuf decoded = decodingVersion == 1 ? decodeLine(in) : decodeStruct(in); if (decoded == null) { return null; @@ -233,8 +234,8 @@ public final class ProxyProtocolDecoder { dstPort = header.readUnsignedShort(); } + //noinspection StatementWithEmptyBody while (skipNextTLV(header)) { - } return new HAProxyMessage(ver, cmd, protAndFam, srcAddress, dstAddress, srcPort, dstPort); } @@ -479,7 +480,7 @@ public final class ProxyProtocolDecoder { * @return frame the {@link ByteBuf} which represent the frame or {@code null} if no frame could * be created */ - public ByteBuf extract(ByteBuf buffer) { + public @Nullable ByteBuf extract(ByteBuf buffer) { final int eoh = findEndOfHeader(buffer); if (!discarding) { if (eoh >= 0) { diff --git a/core/src/main/java/org/geysermc/geyser/pack/GeyserResourcePackManifest.java b/core/src/main/java/org/geysermc/geyser/pack/GeyserResourcePackManifest.java index ddcee6ad5..25a0f0ee0 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/GeyserResourcePackManifest.java +++ b/core/src/main/java/org/geysermc/geyser/pack/GeyserResourcePackManifest.java @@ -30,8 +30,8 @@ import com.fasterxml.jackson.core.JsonParser; import com.fasterxml.jackson.databind.DeserializationContext; import com.fasterxml.jackson.databind.JsonDeserializer; import com.fasterxml.jackson.databind.annotation.JsonDeserialize; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.pack.ResourcePackManifest; -import org.jetbrains.annotations.NotNull; import java.io.IOException; import java.util.Collection; @@ -49,7 +49,7 @@ public record GeyserResourcePackManifest(@JsonProperty("format_version") int for public record Version(int major, int minor, int patch) implements ResourcePackManifest.Version { @Override - public @NotNull String toString() { + public @NonNull String toString() { return major + "." + minor + "." + patch; } diff --git a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java index f59ae8026..e7a9f4f1e 100644 --- a/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java +++ b/core/src/main/java/org/geysermc/geyser/pack/SkullResourcePackManager.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.pack; import it.unimi.dsi.fastutil.Pair; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.pack.ResourcePackManifest; @@ -63,7 +64,7 @@ public class SkullResourcePackManager { public static final Map SKULL_SKINS = new Object2ObjectOpenHashMap<>(); @SuppressWarnings("ResultOfMethodCallIgnored") - public static Path createResourcePack() { + public static @Nullable Path createResourcePack() { Path cachePath = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache"); try { Files.createDirectories(cachePath); @@ -165,7 +166,7 @@ public class SkullResourcePackManager { } private static void addBaseResources(ZipOutputStream zipOS) throws IOException { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(GeyserImpl.getInstance().getBootstrap().getResource("bedrock/skull_resource_pack_files.txt")))) { + try (BufferedReader reader = new BufferedReader(new InputStreamReader(GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("bedrock/skull_resource_pack_files.txt")))) { List lines = reader.lines().toList(); for (String path : lines) { ZipEntry entry = new ZipEntry(path); diff --git a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java index e3c72c174..64ad2c445 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java +++ b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.ping; import com.fasterxml.jackson.core.JsonParseException; import com.fasterxml.jackson.databind.JsonMappingException; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.util.VarInts; import io.netty.handler.codec.haproxy.HAProxyCommand; import io.netty.handler.codec.haproxy.HAProxyProxiedProtocol; @@ -57,7 +58,7 @@ public class GeyserLegacyPingPassthrough implements IGeyserPingPassthrough, Runn * @param geyser Geyser * @return GeyserPingPassthrough, or null if not initialized */ - public static IGeyserPingPassthrough init(GeyserImpl geyser) { + public static @Nullable IGeyserPingPassthrough init(GeyserImpl geyser) { if (geyser.getConfig().isPassthroughMotd() || geyser.getConfig().isPassthroughPlayerCounts()) { GeyserLegacyPingPassthrough pingPassthrough = new GeyserLegacyPingPassthrough(geyser); // Ensure delay is not zero diff --git a/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java b/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java index b6095cce2..318035e32 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java +++ b/core/src/main/java/org/geysermc/geyser/ping/IGeyserPingPassthrough.java @@ -25,7 +25,7 @@ package org.geysermc.geyser.ping; -import javax.annotation.Nullable; +import org.checkerframework.checker.nullness.qual.Nullable; import java.net.InetSocketAddress; /** diff --git a/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java index fc4e3d022..aea7d539e 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/AbstractMappedRegistry.java @@ -25,9 +25,9 @@ package org.geysermc.geyser.registry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.registry.loader.RegistryLoader; -import javax.annotation.Nullable; import java.util.Map; import java.util.Optional; import java.util.function.Function; diff --git a/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java index 124aea713..3df3ded58 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/ArrayRegistry.java @@ -25,9 +25,9 @@ package org.geysermc.geyser.registry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.registry.loader.RegistryLoader; -import javax.annotation.Nullable; import java.util.function.Supplier; /** diff --git a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java index 49fd90cf7..aa9d6fc36 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java +++ b/core/src/main/java/org/geysermc/geyser/registry/BlockRegistries.java @@ -33,7 +33,6 @@ import it.unimi.dsi.fastutil.objects.Object2IntOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockItem; import org.geysermc.geyser.api.block.custom.nonvanilla.JavaBlockState; import org.geysermc.geyser.registry.loader.CollisionRegistryLoader; import org.geysermc.geyser.registry.loader.RegistryLoaders; diff --git a/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java index 892f4a6df..981ed0f8c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/IntMappedRegistry.java @@ -26,8 +26,8 @@ package org.geysermc.geyser.registry; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.registry.loader.RegistryLoader; -import org.jetbrains.annotations.Nullable; import java.util.function.Supplier; diff --git a/core/src/main/java/org/geysermc/geyser/registry/Registry.java b/core/src/main/java/org/geysermc/geyser/registry/Registry.java index f6be19af2..8836502b3 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/Registry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/Registry.java @@ -25,7 +25,6 @@ package org.geysermc.geyser.registry; -import org.cloudburstmc.nbt.NbtMap; import org.geysermc.geyser.registry.loader.RegistryLoader; import java.util.function.Consumer; diff --git a/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java b/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java index cfed73d24..ec7665ff0 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/registry/VersionedRegistry.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.registry; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.registry.loader.RegistryLoader; import java.util.Map; @@ -53,7 +54,9 @@ public class VersionedRegistry extends AbstractMappedRegistry current = null; for (Int2ObjectMap.Entry entry : this.mappings.int2ObjectEntrySet()) { @@ -69,7 +72,10 @@ public class VersionedRegistry extends AbstractMappedRegistry implements Regi this.mapper = mapper; } + @SuppressWarnings("unchecked") @Override public Map load(String input) { Map entries = new Object2ObjectOpenHashMap<>(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java index f7fb708fb..3205004e4 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/BiomeIdentifierRegistryLoader.java @@ -47,7 +47,7 @@ public class BiomeIdentifierRegistryLoader implements RegistryLoader> biomeEntriesType = new TypeReference<>() { }; Map biomeEntries; - try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource("mappings/biomes.json")) { + try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/biomes.json")) { biomeEntries = GeyserImpl.JSON_MAPPER.readValue(stream, biomeEntriesType); } catch (IOException e) { throw new AssertionError("Unable to load Bedrock runtime biomes", e); diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java index bf2d72b27..95e8bd2c1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/CollisionRegistryLoader.java @@ -32,6 +32,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectArrayList; import lombok.AllArgsConstructor; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; @@ -66,7 +67,7 @@ public class CollisionRegistryLoader extends MultiResourceRegistryLoader collisionList; - try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(input.value())) { + try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow(input.value())) { ArrayNode collisionNode = (ArrayNode) GeyserImpl.JSON_MAPPER.readTree(stream); collisionList = loadBoundingBoxes(collisionNode); } catch (Exception e) { @@ -101,7 +102,7 @@ public class CollisionRegistryLoader extends MultiResourceRegistryLoader, CollisionInfo> annotationMap, List collisionList) { + private @Nullable BlockCollision instantiateCollision(BlockMapping mapping, Map, CollisionInfo> annotationMap, List collisionList) { String[] blockIdParts = mapping.getJavaIdentifier().split("\\["); String blockName = blockIdParts[0].replace("minecraft:", ""); String params = ""; diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java index 9e1bbc6aa..aa95c1d56 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/EffectRegistryLoader.java @@ -43,7 +43,7 @@ public abstract class EffectRegistryLoader implements RegistryLoader load(String input) { JsonNode enchantmentsNode; - try (InputStream enchantmentsStream = GeyserImpl.getInstance().getBootstrap().getResource(input)) { + try (InputStream enchantmentsStream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow(input)) { enchantmentsNode = GeyserImpl.JSON_MAPPER.readTree(enchantmentsStream); } catch (Exception e) { throw new AssertionError("Unable to load enchantment data", e); diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java index fcdbfcab3..c1f0d4fee 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/NbtRegistryLoader.java @@ -37,7 +37,7 @@ public class NbtRegistryLoader implements RegistryLoader { @Override public NbtMap load(String input) { - try (NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(GeyserImpl.getInstance().getBootstrap().getResource(input), true, true)) { + try (NBTInputStream nbtInputStream = NbtUtils.createNetworkReader(GeyserImpl.getInstance().getBootstrap().getResourceOrThrow(input), true, true)) { return (NbtMap) nbtInputStream.readTag(); } catch (Exception e) { throw new AssertionError("Failed to load registrations for " + input, e); diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java index 7d5061382..0eec7cdb6 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/PotionMixRegistryLoader.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.registry.loader; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.protocol.bedrock.data.inventory.crafting.PotionMixData; import org.geysermc.geyser.inventory.item.Potion; import org.geysermc.geyser.item.Items; @@ -44,7 +45,7 @@ import java.util.Set; * Generates a collection of {@link PotionMixData} that enables the * Bedrock client to place brewing items into the brewing stand. * (Does not contain actual potion mixes.) - * + *

* Designed to replicate Java Edition behavior. * (Ex: Bedrock cannot normally place glass bottles or fully upgraded * potions into the brewing stand, but Java can.) diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java index 6703726ea..318cc08d7 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/SoundRegistryLoader.java @@ -43,7 +43,7 @@ public class SoundRegistryLoader implements RegistryLoader load(String input) { JsonNode soundsTree; - try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(input)) { + try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow(input)) { soundsTree = GeyserImpl.JSON_MAPPER.readTree(stream); } catch (IOException e) { throw new AssertionError("Unable to load sound mappings", e); diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java index 039412957..d09e0b5a1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/MappingsConfigReader.java @@ -28,6 +28,7 @@ package org.geysermc.geyser.registry.mappings; import com.fasterxml.jackson.databind.JsonNode; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.registry.mappings.util.CustomBlockMapping; @@ -57,6 +58,8 @@ public class MappingsConfigReader { } } + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") public boolean ensureMappingsDirectory(Path mappingsDirectory) { if (!Files.exists(mappingsDirectory)) { try { @@ -92,7 +95,7 @@ public class MappingsConfigReader { } } - public JsonNode getMappingsRoot(Path file) { + public @Nullable JsonNode getMappingsRoot(Path file) { JsonNode mappingsRoot; try { mappingsRoot = GeyserImpl.JSON_MAPPER.readTree(file.toFile()); @@ -121,9 +124,13 @@ public class MappingsConfigReader { public void readItemMappingsFromJson(Path file, BiConsumer consumer) { JsonNode mappingsRoot = getMappingsRoot(file); + if (mappingsRoot == null) { + return; + } + int formatVersion = getFormatVersion(mappingsRoot, file); - if (formatVersion < 0 || mappingsRoot == null) { + if (formatVersion < 0) { return; } @@ -133,9 +140,13 @@ public class MappingsConfigReader { public void readBlockMappingsFromJson(Path file, BiConsumer consumer) { JsonNode mappingsRoot = getMappingsRoot(file); + if (mappingsRoot == null) { + return; + } + int formatVersion = getFormatVersion(mappingsRoot, file); - if (formatVersion < 0 || mappingsRoot == null) { + if (formatVersion < 0) { return; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java index 3dbb7908e..10108cc9c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/util/CustomBlockMapping.java @@ -25,11 +25,11 @@ package org.geysermc.geyser.registry.mappings.util; -import java.util.Map; - import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.api.block.custom.CustomBlockData; +import java.util.Map; + /** * This class is used to store a custom block mappings, which contain all of the * data required to register a custom block that overrides a group of java block @@ -38,7 +38,7 @@ import org.geysermc.geyser.api.block.custom.CustomBlockData; * @param data The custom block data * @param states The custom block state mappings * @param javaIdentifier The java identifier of the block - * @param overrideItem Whether or not the custom block should override the java item + * @param overrideItem Whether the custom block should override the java item */ public record CustomBlockMapping(@NonNull CustomBlockData data, @NonNull Map states, @NonNull String javaIdentifier, boolean overrideItem) { } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java index e76df2834..b2bdd5a01 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.registry.mappings.versions; import com.fasterxml.jackson.databind.JsonNode; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomRenderOffsets; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; @@ -41,7 +42,7 @@ public abstract class MappingsReader { public abstract CustomItemData readItemMappingEntry(JsonNode node) throws InvalidCustomMappingsFileException; public abstract CustomBlockMapping readBlockMappingEntry(String identifier, JsonNode node) throws InvalidCustomMappingsFileException; - protected CustomRenderOffsets fromJsonNode(JsonNode node) { + protected @Nullable CustomRenderOffsets fromJsonNode(JsonNode node) { if (node == null || !node.isObject()) { return null; } @@ -52,7 +53,7 @@ public abstract class MappingsReader { ); } - protected CustomRenderOffsets.Hand getHandOffsets(JsonNode node, String hand) { + protected CustomRenderOffsets.@Nullable Hand getHandOffsets(JsonNode node, String hand) { JsonNode tmpNode = node.get(hand); if (tmpNode == null || !tmpNode.isObject()) { return null; @@ -64,7 +65,7 @@ public abstract class MappingsReader { ); } - protected CustomRenderOffsets.Offset getPerspectiveOffsets(JsonNode node, String perspective) { + protected CustomRenderOffsets.@Nullable Offset getPerspectiveOffsets(JsonNode node, String perspective) { JsonNode tmpNode = node.get(perspective); if (tmpNode == null || !tmpNode.isObject()) { return null; @@ -77,7 +78,7 @@ public abstract class MappingsReader { ); } - protected CustomRenderOffsets.OffsetXYZ getOffsetXYZ(JsonNode node, String offsetType) { + protected CustomRenderOffsets.@Nullable OffsetXYZ getOffsetXYZ(JsonNode node, String offsetType) { JsonNode tmpNode = node.get(offsetType); if (tmpNode == null || !tmpNode.isObject()) { return null; diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index fb4a6acbe..1a498c3fa 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -30,6 +30,7 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.github.steveice10.mc.protocol.data.game.Identifier; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; @@ -405,7 +406,9 @@ public class MappingsReader_v1 extends MappingsReader { if (boneVisibility.isObject()) { Map boneVisibilityMap = new Object2ObjectOpenHashMap<>(); boneVisibility.fields().forEachRemaining(entry -> { - boneVisibilityMap.put(entry.getKey(), entry.getValue().isBoolean() ? (entry.getValue().asBoolean() ? "1" : "0") : entry.getValue().asText()); + String key = entry.getKey(); + String value = entry.getValue().isBoolean() ? (entry.getValue().asBoolean() ? "1" : "0") : entry.getValue().asText(); + boneVisibilityMap.put(key, value); }); geometryBuilder.boneVisibility(boneVisibilityMap); } @@ -483,7 +486,7 @@ public class MappingsReader_v1 extends MappingsReader { String key = entry.getKey(); JsonNode value = entry.getValue(); if (value.isObject()) { - MaterialInstance materialInstance = createMaterialInstanceComponent(value, name); + MaterialInstance materialInstance = createMaterialInstanceComponent(value); builder.materialInstance(key, materialInstance); } }); @@ -583,7 +586,7 @@ public class MappingsReader_v1 extends MappingsReader { * @param javaId the block's Java ID * @return the {@link BoxComponent} or null if the block's collision box would not exceed 16 y units */ - private BoxComponent createExtendedBoxComponent(int javaId) { + private @Nullable BoxComponent createExtendedBoxComponent(int javaId) { BlockCollision blockCollision = BlockUtils.getCollision(javaId); if (blockCollision == null) { return null; @@ -603,7 +606,7 @@ public class MappingsReader_v1 extends MappingsReader { * @param node the JSON node * @return the {@link BoxComponent} */ - private BoxComponent createBoxComponent(JsonNode node) { + private @Nullable BoxComponent createBoxComponent(JsonNode node) { if (node != null && node.isObject()) { if (node.has("origin") && node.has("size")) { JsonNode origin = node.get("origin"); @@ -627,10 +630,9 @@ public class MappingsReader_v1 extends MappingsReader { * The name is used as a fallback if no texture is provided by the node * * @param node the material instance node - * @param name the custom block name * @return the {@link MaterialInstance} */ - private MaterialInstance createMaterialInstanceComponent(JsonNode node, String name) { + private MaterialInstance createMaterialInstanceComponent(JsonNode node) { // Set default values, and use what the user provides if they have provided something String texture = null; if (node.has("texture")) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index e3f4e685d..328f61500 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -79,7 +79,7 @@ public final class BlockRegistryPopulator { PRE_INIT, INIT_JAVA, INIT_BEDROCK, - POST_INIT; + POST_INIT } @FunctionalInterface @@ -103,10 +103,10 @@ public final class BlockRegistryPopulator { public static void populate(Stage stage) { switch (stage) { - case PRE_INIT, POST_INIT -> { nullifyBlocksNode(); } - case INIT_JAVA -> { registerJavaBlocks(); } - case INIT_BEDROCK -> { registerBedrockBlocks(); } - default -> { throw new IllegalArgumentException("Unknown stage: " + stage); } + case PRE_INIT, POST_INIT -> nullifyBlocksNode(); + case INIT_JAVA -> registerJavaBlocks(); + case INIT_BEDROCK -> registerBedrockBlocks(); + default -> throw new IllegalArgumentException("Unknown stage: " + stage); } } @@ -137,14 +137,15 @@ public final class BlockRegistryPopulator { // We can keep this strong as nothing should be garbage collected // Safe to intern since Cloudburst NBT is immutable + //noinspection UnstableApiUsage Interner statesInterner = Interners.newStrongInterner(); for (ObjectIntPair palette : blockMappers.keySet()) { int protocolVersion = palette.valueInt(); List vanillaBlockStates; List blockStates; - try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(String.format("bedrock/block_palette.%s.nbt", palette.key())); - NBTInputStream nbtInputStream = new NBTInputStream(new DataInputStream(new GZIPInputStream(stream)), true, true)) { + try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow(String.format("bedrock/block_palette.%s.nbt", palette.key())); + NBTInputStream nbtInputStream = new NBTInputStream(new DataInputStream(new GZIPInputStream(stream)), true, true)) { NbtMap blockPalette = (NbtMap) nbtInputStream.readTag(); vanillaBlockStates = new ArrayList<>(blockPalette.getList("blocks", NbtType.COMPOUND)); @@ -153,6 +154,7 @@ public final class BlockRegistryPopulator { builder.remove("version"); // Remove all nbt tags which are not needed for differentiating states builder.remove("name_hash"); // Quick workaround - was added in 1.19.20 builder.remove("network_id"); // Added in 1.19.80 - ???? + //noinspection UnstableApiUsage builder.putCompound("states", statesInterner.intern((NbtMap) builder.remove("states"))); vanillaBlockStates.set(i, builder.build()); } @@ -323,7 +325,7 @@ public final class BlockRegistryPopulator { builder.bedrockMovingBlock(movingBlockDefinition); Map nonVanillaStateOverrides = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get(); - if (nonVanillaStateOverrides.size() > 0) { + if (!nonVanillaStateOverrides.isEmpty()) { // First ensure all non vanilla runtime IDs at minimum are air in case they aren't consecutive Arrays.fill(javaToVanillaBedrockBlocks, MIN_CUSTOM_RUNTIME_ID, javaToVanillaBedrockBlocks.length, airDefinition); Arrays.fill(javaToBedrockBlocks, MIN_CUSTOM_RUNTIME_ID, javaToBedrockBlocks.length, airDefinition); @@ -374,7 +376,7 @@ public final class BlockRegistryPopulator { private static void registerJavaBlocks() { JsonNode blocksJson; - try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource("mappings/blocks.json")) { + try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/blocks.json")) { blocksJson = GeyserImpl.JSON_MAPPER.readTree(stream); } catch (Exception e) { throw new AssertionError("Unable to load Java block mappings", e); @@ -382,9 +384,9 @@ public final class BlockRegistryPopulator { JAVA_BLOCKS_SIZE = blocksJson.size(); - if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { - MIN_CUSTOM_RUNTIME_ID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().min(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); - int maxCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().max(Comparator.comparing(JavaBlockState::javaId)).get().javaId(); + if (!BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().isEmpty()) { + MIN_CUSTOM_RUNTIME_ID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().min(Comparator.comparing(JavaBlockState::javaId)).orElseThrow().javaId(); + int maxCustomRuntimeID = BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet().stream().max(Comparator.comparing(JavaBlockState::javaId)).orElseThrow().javaId(); if (MIN_CUSTOM_RUNTIME_ID < blocksJson.size()) { throw new RuntimeException("Non vanilla custom block state overrides runtime ID must start after the last vanilla block state (" + JAVA_BLOCKS_SIZE + ")"); @@ -531,7 +533,7 @@ public final class BlockRegistryPopulator { } BlockStateValues.JAVA_WATER_ID = waterRuntimeId; - if (BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().size() > 0) { + if (!BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().isEmpty()) { Set usedNonVanillaRuntimeIDs = new HashSet<>(); for (JavaBlockState javaBlockState : BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.get().keySet()) { @@ -543,6 +545,7 @@ public final class BlockRegistryPopulator { String javaId = javaBlockState.identifier(); int stateRuntimeId = javaBlockState.javaId(); + String pistonBehavior = javaBlockState.pistonBehavior(); BlockMapping blockMapping = BlockMapping.builder() .canBreakWithHand(javaBlockState.canBreakWithHand()) .pickItem(javaBlockState.pickItem()) @@ -550,7 +553,7 @@ public final class BlockRegistryPopulator { .javaIdentifier(javaId) .javaBlockId(javaBlockState.stateGroupId()) .hardness(javaBlockState.blockHardness()) - .pistonBehavior(javaBlockState.pistonBehavior() == null ? PistonBehavior.NORMAL : PistonBehavior.getByName(javaBlockState.pistonBehavior())) + .pistonBehavior(pistonBehavior == null ? PistonBehavior.NORMAL : PistonBehavior.getByName(pistonBehavior)) .isBlockEntity(javaBlockState.hasBlockEntity()) .build(); @@ -576,7 +579,7 @@ public final class BlockRegistryPopulator { BLOCKS_JSON = blocksJson; JsonNode blockInteractionsJson; - try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource("mappings/interactions.json")) { + try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/interactions.json")) { blockInteractionsJson = GeyserImpl.JSON_MAPPER.readTree(stream); } catch (Exception e) { throw new AssertionError("Unable to load Java block interaction mappings", e); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java index 6944bbcc3..d27a2ed49 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.registry.populator; import com.fasterxml.jackson.databind.JsonNode; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtUtils; @@ -61,7 +62,7 @@ public class CreativeItemRegistryPopulator { // Load creative items JsonNode creativeItemEntries; - try (InputStream stream = bootstrap.getResource(String.format("bedrock/creative_items.%s.json", palette.version()))) { + try (InputStream stream = bootstrap.getResourceOrThrow(String.format("bedrock/creative_items.%s.json", palette.version()))) { creativeItemEntries = GeyserImpl.JSON_MAPPER.readTree(stream).get("items"); } catch (Exception e) { throw new AssertionError("Unable to load creative items", e); @@ -78,10 +79,10 @@ public class CreativeItemRegistryPopulator { } } - private static ItemData.Builder createItemData(JsonNode itemNode, BlockMappings blockMappings, Map definitions) { + private static ItemData.@Nullable Builder createItemData(JsonNode itemNode, BlockMappings blockMappings, Map definitions) { int count = 1; int damage = 0; - int bedrockBlockRuntimeId = -1; + int bedrockBlockRuntimeId; NbtMap tag = null; String identifier = itemNode.get("id").textValue(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index e4bf43b93..e4f45ac85 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -48,7 +48,7 @@ public class CustomBlockRegistryPopulator { DEFINITION, VANILLA_REGISTRATION, NON_VANILLA_REGISTRATION, - CUSTOM_REGISTRATION; + CUSTOM_REGISTRATION } /** @@ -62,11 +62,11 @@ public class CustomBlockRegistryPopulator { } switch (stage) { - case DEFINITION -> { populateBedrock(); } - case VANILLA_REGISTRATION -> { populateVanilla(); } - case NON_VANILLA_REGISTRATION -> { populateNonVanilla(); } - case CUSTOM_REGISTRATION -> { registration(); } - default -> { throw new IllegalArgumentException("Unknown stage: " + stage); } + case DEFINITION -> populateBedrock(); + case VANILLA_REGISTRATION -> populateVanilla(); + case NON_VANILLA_REGISTRATION -> populateNonVanilla(); + case CUSTOM_REGISTRATION -> registration(); + default -> throw new IllegalArgumentException("Unknown stage: " + stage); } } @@ -479,7 +479,7 @@ public class CustomBlockRegistryPopulator { } private static CustomBlockData createExtendedCollisionBlock(BoxComponent boxComponent, int extendedCollisionBlock) { - CustomBlockData customBlockData = new CustomBlockDataBuilder() + return new CustomBlockDataBuilder() .name("extended_collision_" + extendedCollisionBlock) .components( new CustomBlockComponentsBuilder() @@ -497,6 +497,5 @@ public class CustomBlockRegistryPopulator { .build()) .build()) .build(); - return customBlockData; } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index 638e41a5e..6be1aac4c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.registry.populator; import com.google.common.collect.Multimap; import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; @@ -48,7 +49,6 @@ import org.geysermc.geyser.registry.type.GeyserMappingItem; import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.registry.type.NonVanillaItemRegistration; -import javax.annotation.Nullable; import java.util.*; public class CustomItemRegistryPopulator { @@ -171,7 +171,7 @@ public class CustomItemRegistryPopulator { boolean canDestroyInCreative = true; if (mapping.getToolType() != null) { // This is not using the isTool boolean because it is not just a render type here. - canDestroyInCreative = computeToolProperties(mapping.getToolTier(), mapping.getToolType(), itemProperties, componentBuilder); + canDestroyInCreative = computeToolProperties(mapping.getToolType(), itemProperties, componentBuilder); } itemProperties.putBoolean("can_destroy_in_creative", canDestroyInCreative); @@ -192,18 +192,11 @@ public class CustomItemRegistryPopulator { } switch (mapping.getBedrockIdentifier()) { - case "minecraft:fire_charge", "minecraft:flint_and_steel" -> { - computeBlockItemProperties("minecraft:fire", componentBuilder); - } - case "minecraft:bow", "minecraft:crossbow", "minecraft:trident" -> { - computeChargeableProperties(itemProperties, componentBuilder); - } - case "minecraft:honey_bottle", "minecraft:milk_bucket", "minecraft:potion" -> { - computeConsumableProperties(itemProperties, componentBuilder, 2, true); - } - case "minecraft:experience_bottle", "minecraft:egg", "minecraft:ender_pearl", "minecraft:ender_eye", "minecraft:lingering_potion", "minecraft:snowball", "minecraft:splash_potion" -> { - computeThrowableProperties(componentBuilder); - } + case "minecraft:fire_charge", "minecraft:flint_and_steel" -> computeBlockItemProperties("minecraft:fire", componentBuilder); + case "minecraft:bow", "minecraft:crossbow", "minecraft:trident" -> computeChargeableProperties(itemProperties, componentBuilder); + case "minecraft:honey_bottle", "minecraft:milk_bucket", "minecraft:potion" -> computeConsumableProperties(itemProperties, componentBuilder, 2, true); + case "minecraft:experience_bottle", "minecraft:egg", "minecraft:ender_pearl", "minecraft:ender_eye", "minecraft:lingering_potion", "minecraft:snowball", "minecraft:splash_potion" -> + computeThrowableProperties(componentBuilder); } computeRenderOffsets(false, customItemData, componentBuilder); @@ -214,6 +207,7 @@ public class CustomItemRegistryPopulator { return builder; } + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") private static NbtMapBuilder createComponentNbt(NonVanillaCustomItemData customItemData, String customItemName, int customItemId, OptionalInt creativeCategory, String creativeGroup, boolean isHat, boolean displayHandheld) { @@ -228,7 +222,7 @@ public class CustomItemRegistryPopulator { boolean canDestroyInCreative = true; if (customItemData.toolType() != null) { // This is not using the isTool boolean because it is not just a render type here. - canDestroyInCreative = computeToolProperties(customItemData.toolTier(), customItemData.toolType(), itemProperties, componentBuilder); + canDestroyInCreative = computeToolProperties(customItemData.toolType(), itemProperties, componentBuilder); } itemProperties.putBoolean("can_destroy_in_creative", canDestroyInCreative); @@ -300,7 +294,7 @@ public class CustomItemRegistryPopulator { /** * @return can destroy in creative */ - private static boolean computeToolProperties(String toolTier, String toolType, NbtMapBuilder itemProperties, NbtMapBuilder componentBuilder) { + private static boolean computeToolProperties(String toolType, NbtMapBuilder itemProperties, NbtMapBuilder componentBuilder) { boolean canDestroyInCreative = true; float miningSpeed = 1.0f; @@ -467,7 +461,7 @@ public class CustomItemRegistryPopulator { return builder.build(); } - private static NbtMap toNbtMap(CustomRenderOffsets.Hand hand) { + private static @Nullable NbtMap toNbtMap(CustomRenderOffsets.Hand hand) { NbtMap firstPerson = toNbtMap(hand.firstPerson()); NbtMap thirdPerson = toNbtMap(hand.thirdPerson()); @@ -486,7 +480,7 @@ public class CustomItemRegistryPopulator { return builder.build(); } - private static NbtMap toNbtMap(@Nullable CustomRenderOffsets.Offset offset) { + private static @Nullable NbtMap toNbtMap(CustomRenderOffsets.@Nullable Offset offset) { if (offset == null) { return null; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index f66d21572..02d9a75ec 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -27,7 +27,8 @@ package org.geysermc.geyser.registry.populator; import it.unimi.dsi.fastutil.objects.Object2ObjectMaps; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import lombok.NonNull; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomSkullsEvent; @@ -139,7 +140,7 @@ public class CustomSkullRegistryPopulator { * @param profile the base64 encoded profile * @return the skin hash or null if the profile is invalid */ - private static String getSkinHash(String profile) { + private static @Nullable String getSkinHash(String profile) { try { SkinManager.GameProfileData profileData = SkinManager.GameProfileData.loadFromJson(profile); if (profileData == null) { @@ -159,7 +160,7 @@ public class CustomSkullRegistryPopulator { * @param username the player username * @return the base64 encoded profile or null if the request failed */ - private static String getProfileFromUsername(String username) { + private static @Nullable String getProfileFromUsername(String username) { try { return SkinProvider.requestTexturesFromUsername(username).get(); } catch (InterruptedException | ExecutionException e) { @@ -173,7 +174,7 @@ public class CustomSkullRegistryPopulator { * @param uuid the player UUID * @return the base64 encoded profile or null if the request failed */ - private static String getProfileFromUuid(String uuid) { + private static @Nullable String getProfileFromUuid(String uuid) { try { String uuidDigits = uuid.replace("-", ""); if (uuidDigits.length() != 32) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index fe6e21e6f..f46a49c3a 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -139,7 +139,7 @@ public class ItemRegistryPopulator { TypeReference> mappingItemsType = new TypeReference<>() { }; Map items; - try (InputStream stream = bootstrap.getResource("mappings/items.json")) { + try (InputStream stream = bootstrap.getResourceOrThrow("mappings/items.json")) { // Load item mappings from Java Edition to Bedrock Edition items = GeyserImpl.JSON_MAPPER.readValue(stream, mappingItemsType); } catch (Exception e) { @@ -166,7 +166,7 @@ public class ItemRegistryPopulator { TypeReference> paletteEntriesType = new TypeReference<>() {}; List itemEntries; - try (InputStream stream = bootstrap.getResource(String.format("bedrock/runtime_item_states.%s.json", palette.version()))) { + try (InputStream stream = bootstrap.getResourceOrThrow(String.format("bedrock/runtime_item_states.%s.json", palette.version()))) { itemEntries = GeyserImpl.JSON_MAPPER.readValue(stream, paletteEntriesType); } catch (Exception e) { throw new AssertionError("Unable to load Bedrock runtime item IDs", e); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java index 3e9e2c257..f8929c900 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/RecipeRegistryPopulator.java @@ -64,7 +64,7 @@ public class RecipeRegistryPopulator { public static void populate() { JsonNode items; - try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource("mappings/recipes.json")) { + try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow("mappings/recipes.json")) { items = GeyserImpl.JSON_MAPPER.readTree(stream); } catch (Exception e) { throw new AssertionError(GeyserLocale.getLocaleStringLog("geyser.toolbox.fail.runtime_java"), e); diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java index 9745a8859..0196ac22f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMapping.java @@ -27,16 +27,15 @@ package org.geysermc.geyser.registry.type; import lombok.Builder; import lombok.Value; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.level.physics.PistonBehavior; import org.geysermc.geyser.util.BlockUtils; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - @Builder @Value public class BlockMapping { - public static BlockMapping DEFAULT = BlockMapping.builder().javaIdentifier("minecraft:air").pistonBehavior(PistonBehavior.NORMAL).build();; + public static BlockMapping DEFAULT = BlockMapping.builder().javaIdentifier("minecraft:air").pistonBehavior(PistonBehavior.NORMAL).build(); String javaIdentifier; /** @@ -53,8 +52,7 @@ public class BlockMapping { int collisionIndex; @Nullable String pickItem; - @Nonnull - PistonBehavior pistonBehavior; + @NonNull PistonBehavior pistonBehavior; boolean isBlockEntity; boolean isNonVanilla; diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java index 3d06cecac..8c0414a6d 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/BlockMappings.java @@ -29,6 +29,7 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.objects.Object2ObjectMap; import lombok.Builder; import lombok.Value; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; @@ -96,14 +97,14 @@ public class BlockMappings implements DefinitionRegistry { } @Override - public GeyserBedrockBlock getDefinition(int bedrockId) { + public @Nullable GeyserBedrockBlock getDefinition(int bedrockId) { if (bedrockId < 0 || bedrockId >= this.bedrockRuntimeMap.length) { return null; } return bedrockRuntimeMap[bedrockId]; } - public GeyserBedrockBlock getDefinition(NbtMap tag) { + public @Nullable GeyserBedrockBlock getDefinition(NbtMap tag) { if (tag == null) { return null; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java b/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java index f8aeb78ee..4108fba1f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ParticleMapping.java @@ -25,10 +25,8 @@ package org.geysermc.geyser.registry.type; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.LevelEventType; -import javax.annotation.ParametersAreNullableByDefault; - -@ParametersAreNullableByDefault -public record ParticleMapping(LevelEventType levelEventType, String identifier) { +public record ParticleMapping(@Nullable LevelEventType levelEventType, @Nullable String identifier) { } \ No newline at end of file diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java index 688666c73..fd9e0fbf3 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Objective.java @@ -29,6 +29,7 @@ import com.github.steveice10.mc.protocol.data.game.scoreboard.ScoreboardPosition import com.github.steveice10.mc.protocol.data.game.scoreboard.TeamColor; import lombok.Getter; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.Nullable; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -150,7 +151,7 @@ public final class Objective { updateType = UpdateType.REMOVE; } - public TeamColor getTeamColor() { + public @Nullable TeamColor getTeamColor() { return switch (displaySlot) { case SIDEBAR_TEAM_RED -> TeamColor.RED; case SIDEBAR_TEAM_AQUA -> TeamColor.AQUA; diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java index c49e8afc4..1e0ea5eb1 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java @@ -26,13 +26,14 @@ package org.geysermc.geyser.scoreboard; import com.github.steveice10.mc.protocol.data.game.scoreboard.ScoreboardPosition; +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import lombok.Getter; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.ScoreInfo; import org.cloudburstmc.protocol.bedrock.data.command.CommandEnumConstraint; import org.cloudburstmc.protocol.bedrock.packet.RemoveObjectivePacket; import org.cloudburstmc.protocol.bedrock.packet.SetDisplayObjectivePacket; import org.cloudburstmc.protocol.bedrock.packet.SetScorePacket; -import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; -import lombok.Getter; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; import org.geysermc.geyser.entity.type.Entity; @@ -41,14 +42,16 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; import org.jetbrains.annotations.Contract; -import javax.annotation.Nullable; import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicLong; import java.util.function.Function; import java.util.stream.Collectors; -import static org.geysermc.geyser.scoreboard.UpdateType.*; +import static org.geysermc.geyser.scoreboard.UpdateType.ADD; +import static org.geysermc.geyser.scoreboard.UpdateType.NOTHING; +import static org.geysermc.geyser.scoreboard.UpdateType.REMOVE; +import static org.geysermc.geyser.scoreboard.UpdateType.UPDATE; public final class Scoreboard { private static final boolean SHOW_SCOREBOARD_LOGS = Boolean.parseBoolean(System.getProperty("Geyser.ShowScoreboardLogs", "true")); @@ -89,7 +92,7 @@ public final class Scoreboard { } } - public Objective registerNewObjective(String objectiveId) { + public @Nullable Objective registerNewObjective(String objectiveId) { Objective objective = objectives.get(objectiveId); if (objective != null) { // we have no other choice, or we have to make a new map? diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java index fed3054b4..8c1ef5296 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java @@ -173,6 +173,7 @@ public final class ScoreboardUpdater extends Thread { @Getter public static final class ScoreboardSession { private final GeyserSession session; + @SuppressWarnings("WriteOnlyObject") private final AtomicInteger pendingPacketsPerSecond = new AtomicInteger(0); private int packetsPerSecond; private long lastUpdate; diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java index e985ca803..9164fec1d 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Team.java @@ -32,9 +32,9 @@ import lombok.AccessLevel; import lombok.Getter; import lombok.Setter; import lombok.experimental.Accessors; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.util.HashSet; import java.util.Set; @@ -46,7 +46,7 @@ public final class Team { @Getter(AccessLevel.PACKAGE) private final Set entities; - @Nonnull private NameTagVisibility nameTagVisibility = NameTagVisibility.ALWAYS; + @NonNull private NameTagVisibility nameTagVisibility = NameTagVisibility.ALWAYS; @Setter private TeamColor color; private final TeamData currentData; diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 9bfb4e01c..2f0d47b38 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -147,7 +147,6 @@ import org.geysermc.geyser.util.ChunkUtils; import org.geysermc.geyser.util.DimensionUtils; import org.geysermc.geyser.util.EntityUtils; import org.geysermc.geyser.util.LoginEncryptionUtils; -import org.jetbrains.annotations.NotNull; import java.net.ConnectException; import java.net.InetSocketAddress; @@ -181,7 +180,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private List certChainData; - @NotNull + @NonNull @Setter private AbstractGeyserboundPacketHandler erosionHandler; @@ -336,7 +335,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { /** * Tracks the original speed attribute. - * + *

* We need to do this in order to emulate speeds when sneaking under 1.5-blocks-tall areas if the player isn't sneaking, * and when crawling. */ @@ -461,7 +460,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { /** * Store the last time the player interacted. Used to fix a right-click spam bug. - * See https://github.com/GeyserMC/Geyser/issues/503 for context. + * See this for context. */ @Setter private long lastInteractionTime; @@ -1318,7 +1317,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { * * @return not null if attributes should be updated. */ - public AttributeData adjustSpeed() { + public @Nullable AttributeData adjustSpeed() { AttributeData currentPlayerSpeed = playerEntity.getAttributes().get(GeyserAttributeType.MOVEMENT_SPEED); if (currentPlayerSpeed != null) { if ((pose.equals(Pose.SNEAKING) && !sneaking && collisionManager.mustPlayerSneakHere()) || @@ -1370,7 +1369,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } /** - * For https://github.com/GeyserMC/Geyser/issues/2113 and combating arm ticking activating being delayed in + * For issue 2113 and combating arm ticking activating being delayed in * BedrockAnimateTranslator. */ public void armSwingPending() { @@ -1405,7 +1404,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } @Override - public void sendMessage(String message) { + public void sendMessage(@NonNull String message) { TextPacket textPacket = new TextPacket(); textPacket.setPlatformChatId(""); textPacket.setSourceName(""); @@ -1911,7 +1910,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } @Override - public String bedrockUsername() { + public @NonNull String bedrockUsername() { return authData.name(); } @@ -1926,7 +1925,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { } @Override - public String xuid() { + public @NonNull String xuid() { return authData.xuid(); } diff --git a/core/src/main/java/org/geysermc/geyser/session/PendingMicrosoftAuthentication.java b/core/src/main/java/org/geysermc/geyser/session/PendingMicrosoftAuthentication.java index 93200dcb6..132de67cb 100644 --- a/core/src/main/java/org/geysermc/geyser/session/PendingMicrosoftAuthentication.java +++ b/core/src/main/java/org/geysermc/geyser/session/PendingMicrosoftAuthentication.java @@ -32,13 +32,13 @@ import com.google.common.cache.CacheBuilder; import com.google.common.cache.CacheLoader; import com.google.common.cache.LoadingCache; import lombok.Getter; -import lombok.NonNull; import lombok.Setter; import lombok.SneakyThrows; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; -import javax.annotation.Nonnull; +import java.io.Serial; import java.util.concurrent.*; /** @@ -63,12 +63,12 @@ public class PendingMicrosoftAuthentication { }); } - public AuthenticationTask getTask(@Nonnull String userKey) { + public AuthenticationTask getTask(@NonNull String userKey) { return authentications.getIfPresent(userKey); } @SneakyThrows(ExecutionException.class) - public AuthenticationTask getOrCreateTask(@Nonnull String userKey) { + public AuthenticationTask getOrCreateTask(@NonNull String userKey) { return authentications.get(userKey); } @@ -189,6 +189,10 @@ public class PendingMicrosoftAuthentication { * @see PendingMicrosoftAuthentication */ public static class TaskTimeoutException extends Exception { + + @Serial + private static final long serialVersionUID = 1L; + TaskTimeoutException() { super("It took too long to authorize Geyser to access your Microsoft account. " + "Please request new code and try again."); diff --git a/core/src/main/java/org/geysermc/geyser/session/SessionManager.java b/core/src/main/java/org/geysermc/geyser/session/SessionManager.java index 7e5982ab5..14881d059 100644 --- a/core/src/main/java/org/geysermc/geyser/session/SessionManager.java +++ b/core/src/main/java/org/geysermc/geyser/session/SessionManager.java @@ -28,9 +28,10 @@ package org.geysermc.geyser.session; import com.google.common.collect.ImmutableList; import lombok.AccessLevel; import lombok.Getter; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.text.GeyserLocale; -import javax.annotation.Nonnull; import java.util.*; import java.util.concurrent.ConcurrentHashMap; @@ -69,7 +70,7 @@ public final class SessionManager { } } - public GeyserSession sessionByXuid(@Nonnull String xuid) { + public @Nullable GeyserSession sessionByXuid(@NonNull String xuid) { Objects.requireNonNull(xuid); for (GeyserSession session : sessions.values()) { if (session.xuid().equals(xuid)) { diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java index db0321147..3562f0d4d 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java @@ -140,7 +140,7 @@ public class AdvancementsCache { session.sendDownstreamGamePacket(new ServerboundSeenAdvancementsPacket()); }).validResultHandler((response) -> { - if (response.getClickedButtonId() < visibleAdvancements.size()) { + if (response.clickedButtonId() < visibleAdvancements.size()) { GeyserAdvancement advancement = visibleAdvancements.get(response.clickedButtonId()); buildAndShowInfoForm(advancement); } else { diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java index d1ebd0c78..6a9025bc0 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/BookEditCache.java @@ -33,7 +33,7 @@ import org.geysermc.geyser.session.GeyserSession; /** * Manages updating the current writable book. - * + *

* Java sends book updates less frequently than Bedrock, and this can cause issues with servers that rate limit * book packets. Because of this, we need to ensure packets are only send every second or so at maximum. */ diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java index 41f73863e..f118195b9 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/LodestoneCache.java @@ -30,9 +30,9 @@ import com.github.steveice10.opennbt.tag.builtin.IntTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.inventory.GeyserItemStack; -import javax.annotation.Nullable; import java.util.Map; import java.util.WeakHashMap; @@ -54,6 +54,10 @@ public final class LodestoneCache { public void cacheInventoryItem(GeyserItemStack itemStack) { CompoundTag tag = itemStack.getNbt(); + if (tag == null) { + // invalid + return; + } CompoundTag lodestonePos = tag.get("LodestonePos"); if (lodestonePos == null) { // invalid diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java index 9e8597b0f..2aeb83fa8 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/PreferencesCache.java @@ -67,10 +67,10 @@ public class PreferencesCache { /** * Tell the client to hide or show the coordinates. - * + *

* If {@link #prefersShowCoordinates} is true, coordinates will be shown, unless either of the following conditions apply:
*
- * {@link GeyserSession#reducedDebugInfo} is enabled + * {@link GeyserSession#isReducedDebugInfo()} is enabled * {@link GeyserConfiguration#isShowCoordinates()} is disabled */ public void updateShowCoordinates() { diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java index d6e376d8f..5b208a41f 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/SkullCache.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.session.cache; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -247,7 +248,7 @@ public class SkullCache { lastPlayerPosition = null; } - private BlockDefinition translateCustomSkull(String skinHash, int blockState) { + private @Nullable BlockDefinition translateCustomSkull(String skinHash, int blockState) { CustomSkull customSkull = BlockRegistries.CUSTOM_SKULLS.get(skinHash); if (customSkull != null) { byte floorRotation = BlockStateValues.getSkullRotation(blockState); diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java b/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java index d9b9d8a54..8cb590f57 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/WorldBorder.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.session.cache; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.GenericMath; import org.cloudburstmc.math.vector.Vector2d; import org.cloudburstmc.math.vector.Vector3f; @@ -37,13 +38,11 @@ import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.session.GeyserSession; -import javax.annotation.Nonnull; - public class WorldBorder { private static final double DEFAULT_WORLD_BORDER_SIZE = 5.9999968E7D; @Setter - private @Nonnull Vector2d center = Vector2d.ZERO; + private @NonNull Vector2d center = Vector2d.ZERO; /** * The diameter in blocks of the world border before it got changed or similar to newDiameter if not changed. */ diff --git a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java index 95a2dcb1a..4ae30be19 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java @@ -34,13 +34,13 @@ import com.google.common.cache.LoadingCache; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.Setter; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.entity.type.LivingEntity; import org.geysermc.geyser.entity.type.player.PlayerEntity; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; -import javax.annotation.Nonnull; import java.awt.*; import java.awt.image.BufferedImage; import java.io.IOException; @@ -58,7 +58,7 @@ public class FakeHeadProvider { .maximumSize(10000) .build(new CacheLoader<>() { @Override - public SkinProvider.SkinData load(@Nonnull FakeHeadEntry fakeHeadEntry) throws Exception { + public SkinProvider.SkinData load(@NonNull FakeHeadEntry fakeHeadEntry) throws Exception { SkinProvider.SkinData skinData = SkinProvider.getOrDefault(SkinProvider.requestSkinData(fakeHeadEntry.getEntity()), null, 5); if (skinData == null) { diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java index f7d6d7510..33a51fe8f 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinManager.java @@ -29,6 +29,7 @@ import com.fasterxml.jackson.databind.JsonNode; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.skin.ImageData; import org.cloudburstmc.protocol.bedrock.data.skin.SerializedSkin; import org.cloudburstmc.protocol.bedrock.packet.PlayerListPacket; @@ -40,7 +41,6 @@ import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.session.auth.BedrockClientData; import org.geysermc.geyser.text.GeyserLocale; -import javax.annotation.Nullable; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Base64; @@ -277,7 +277,7 @@ public class SkinManager { return null; } - public static GameProfileData loadFromJson(String encodedJson) throws IOException, IllegalArgumentException { + public static @Nullable GameProfileData loadFromJson(String encodedJson) throws IOException, IllegalArgumentException { JsonNode skinObject; try { skinObject = GeyserImpl.JSON_MAPPER.readTree(new String(Base64.getDecoder().decode(encodedJson), StandardCharsets.UTF_8)); diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java index f491473be..23985c33f 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java @@ -32,6 +32,8 @@ import it.unimi.dsi.fastutil.bytes.ByteArrays; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.entity.type.player.PlayerEntity; @@ -40,8 +42,6 @@ import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.FileUtils; import org.geysermc.geyser.util.WebUtils; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; @@ -217,7 +217,7 @@ public class SkinProvider { /** * Used as a fallback if an official Java cape doesn't exist for this user. */ - @Nonnull + @NonNull private static Cape getCachedBedrockCape(UUID uuid) { GeyserSession session = GeyserImpl.getInstance().connectionByUuid(uuid); if (session != null) { @@ -545,7 +545,7 @@ public class SkinProvider { BufferedImage image = null; // First see if we have a cached file. We also update the modification stamp so we know when the file was last used - File imageFile = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("images").resolve(UUID.nameUUIDFromBytes(imageUrl.getBytes()).toString() + ".png").toFile(); + File imageFile = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("cache").resolve("images").resolve(UUID.nameUUIDFromBytes(imageUrl.getBytes()) + ".png").toFile(); if (imageFile.exists()) { try { GeyserImpl.getInstance().getLogger().debug("Reading cached image from file " + imageFile.getPath() + " for " + imageUrl); @@ -617,7 +617,7 @@ public class SkinProvider { * @param uuid the player's UUID without any hyphens * @return a completable GameProfile with textures included */ - public static CompletableFuture requestTexturesFromUUID(String uuid) { + public static CompletableFuture<@Nullable String> requestTexturesFromUUID(String uuid) { return CompletableFuture.supplyAsync(() -> { try { JsonNode node = WebUtils.getJson("https://sessionserver.mojang.com/session/minecraft/profile/" + uuid); @@ -643,7 +643,7 @@ public class SkinProvider { * @param username the player's username * @return a completable GameProfile with textures included */ - public static CompletableFuture requestTexturesFromUsername(String username) { + public static CompletableFuture<@Nullable String> requestTexturesFromUsername(String username) { return CompletableFuture.supplyAsync(() -> { try { // Offline skin, or no present UUID @@ -669,20 +669,25 @@ public class SkinProvider { } private static BufferedImage downloadImage(String imageUrl, CapeProvider provider) throws IOException { - if (provider == CapeProvider.FIVEZIG) - return readFiveZigCape(imageUrl); + BufferedImage image; + if (provider == CapeProvider.FIVEZIG) { + image = readFiveZigCape(imageUrl); + } else { + HttpURLConnection con = (HttpURLConnection) new URL(imageUrl).openConnection(); + con.setRequestProperty("User-Agent", "Geyser-" + GeyserImpl.getInstance().getPlatformType().toString() + "/" + GeyserImpl.VERSION); + con.setConnectTimeout(10000); + con.setReadTimeout(10000); - HttpURLConnection con = (HttpURLConnection) new URL(imageUrl).openConnection(); - con.setRequestProperty("User-Agent", "Geyser-" + GeyserImpl.getInstance().getPlatformType().toString() + "/" + GeyserImpl.VERSION); - con.setConnectTimeout(10000); - con.setReadTimeout(10000); + image = ImageIO.read(con.getInputStream()); + } - BufferedImage image = ImageIO.read(con.getInputStream()); - if (image == null) throw new NullPointerException(); + if (image == null) { + throw new IllegalArgumentException("Failed to read image from: %s (cape provider=%s)".formatted(imageUrl, provider)); + } return image; } - private static BufferedImage readFiveZigCape(String url) throws IOException { + private static @Nullable BufferedImage readFiveZigCape(String url) throws IOException { JsonNode element = GeyserImpl.JSON_MAPPER.readTree(WebUtils.getBody(url)); if (element != null && element.isObject()) { JsonNode capeElement = element.get("d"); diff --git a/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java b/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java index 69dbb558e..702fded92 100644 --- a/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java +++ b/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java @@ -35,6 +35,7 @@ import com.fasterxml.jackson.databind.ser.ContextualSerializer; import com.fasterxml.jackson.databind.ser.std.StdSerializer; import java.io.IOException; +import java.io.Serial; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; @@ -43,6 +44,9 @@ import java.util.Optional; public class AsteriskSerializer extends StdSerializer implements ContextualSerializer { + @Serial + private static final long serialVersionUID = 1L; + public static final String[] NON_SENSITIVE_ADDRESSES = {"", "0.0.0.0", "localhost", "127.0.0.1", "auto", "unknown"}; public static boolean showSensitive = false; @@ -64,10 +68,6 @@ public class AsteriskSerializer extends StdSerializer implements Context String asterisk; boolean isIp; - public AsteriskSerializer() { - super(Object.class); - } - public AsteriskSerializer(String asterisk, boolean isIp) { super(Object.class); this.asterisk = asterisk; @@ -79,7 +79,7 @@ public class AsteriskSerializer extends StdSerializer implements Context Optional anno = Optional.ofNullable(property) .map(prop -> prop.getAnnotation(Asterisk.class)); - return new AsteriskSerializer(anno.map(Asterisk::value).orElse(null), anno.map(Asterisk::isIp).orElse(null)); + return new AsteriskSerializer(anno.map(Asterisk::value).orElse(null), anno.map(Asterisk::isIp).orElse(false)); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java b/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java index 41528c1e4..500f44d0b 100644 --- a/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java +++ b/core/src/main/java/org/geysermc/geyser/text/ChatTypeEntry.java @@ -26,13 +26,12 @@ package org.geysermc.geyser.text; import com.github.steveice10.mc.protocol.data.game.chat.BuiltinChatType; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.packet.TextPacket; import it.unimi.dsi.fastutil.ints.Int2ObjectMap; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; - -public record ChatTypeEntry(@Nonnull TextPacket.Type bedrockChatType, @Nullable TextDecoration textDecoration) { +public record ChatTypeEntry(TextPacket.@NonNull Type bedrockChatType, @Nullable TextDecoration textDecoration) { private static final ChatTypeEntry CHAT = new ChatTypeEntry(TextPacket.Type.CHAT, null); private static final ChatTypeEntry RAW = new ChatTypeEntry(TextPacket.Type.RAW, null); diff --git a/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java b/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java index e934fc124..a6edffcd3 100644 --- a/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java +++ b/core/src/main/java/org/geysermc/geyser/text/DummyLegacyHoverEventSerializer.java @@ -30,7 +30,7 @@ import net.kyori.adventure.text.Component; import net.kyori.adventure.text.event.HoverEvent; import net.kyori.adventure.text.serializer.json.LegacyHoverEventSerializer; import net.kyori.adventure.util.Codec; -import org.jetbrains.annotations.NotNull; +import org.checkerframework.checker.nullness.qual.NonNull; import java.nio.charset.StandardCharsets; import java.util.UUID; @@ -46,23 +46,23 @@ public final class DummyLegacyHoverEventSerializer implements LegacyHoverEventSe } @Override - public HoverEvent.@NotNull ShowItem deserializeShowItem(@NotNull Component input) { + public HoverEvent.@NonNull ShowItem deserializeShowItem(@NonNull Component input) { return dummyShowItem; } @Override - public HoverEvent.@NotNull ShowEntity deserializeShowEntity(@NotNull Component input, + public HoverEvent.@NonNull ShowEntity deserializeShowEntity(@NonNull Component input, Codec.Decoder componentDecoder) { return dummyShowEntity; } @Override - public @NotNull Component serializeShowItem(HoverEvent.@NotNull ShowItem input) { + public @NonNull Component serializeShowItem(HoverEvent.@NonNull ShowItem input) { return Component.empty(); } @Override - public @NotNull Component serializeShowEntity(HoverEvent.@NotNull ShowEntity input, + public @NonNull Component serializeShowEntity(HoverEvent.@NonNull ShowEntity input, Codec.Encoder componentEncoder) { return Component.empty(); } diff --git a/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java b/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java index 340674119..c6a58e75e 100644 --- a/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/GeyserLocale.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.text; import it.unimi.dsi.fastutil.objects.ObjectArrays; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; @@ -110,7 +111,7 @@ public class GeyserLocale { loadGeyserLocale(locale, geyser.getBootstrap()); } - private static String loadGeyserLocale(String locale, GeyserBootstrap bootstrap) { + private static @Nullable String loadGeyserLocale(String locale, GeyserBootstrap bootstrap) { locale = formatLocale(locale); // Don't load the locale if it's already loaded. if (LOCALE_MAPPINGS.containsKey(locale)) { diff --git a/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java b/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java index 2140dcc88..aaf100009 100644 --- a/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java +++ b/core/src/main/java/org/geysermc/geyser/text/GsonComponentSerializerWrapper.java @@ -30,7 +30,7 @@ import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import net.kyori.adventure.text.Component; import net.kyori.adventure.text.serializer.gson.GsonComponentSerializer; -import org.jetbrains.annotations.NotNull; +import org.checkerframework.checker.nullness.qual.NonNull; import java.util.function.UnaryOperator; @@ -40,28 +40,28 @@ import java.util.function.UnaryOperator; public record GsonComponentSerializerWrapper(GsonComponentSerializer source) implements GsonComponentSerializer { @Override - public @NotNull Gson serializer() { + public @NonNull Gson serializer() { return this.source.serializer(); } @Override - public @NotNull UnaryOperator populator() { + public @NonNull UnaryOperator populator() { return this.source.populator(); } @Override - public @NotNull Component deserializeFromTree(@NotNull JsonElement input) { + public @NonNull Component deserializeFromTree(@NonNull JsonElement input) { // This has yet to be an issue, so it won't be overridden unless we have to return this.source.deserializeFromTree(input); } @Override - public @NotNull JsonElement serializeToTree(@NotNull Component component) { + public @NonNull JsonElement serializeToTree(@NonNull Component component) { return this.source.serializeToTree(component); } @Override - public @NotNull Component deserialize(@NotNull String input) { + public @NonNull Component deserialize(@NonNull String input) { // See https://github.com/KyoriPowered/adventure/issues/447 Component component = this.serializer().fromJson(input, Component.class); if (component == null) { @@ -72,12 +72,12 @@ public record GsonComponentSerializerWrapper(GsonComponentSerializer source) imp } @Override - public @NotNull String serialize(@NotNull Component component) { + public @NonNull String serialize(@NonNull Component component) { return this.source.serialize(component); } @Override - public @NotNull Builder toBuilder() { + public @NonNull Builder toBuilder() { return this.source.toBuilder(); } } diff --git a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java index 00866eda3..fa1b322a5 100644 --- a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java @@ -26,12 +26,12 @@ package org.geysermc.geyser.text; import com.fasterxml.jackson.databind.JsonNode; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.util.AssetUtils; import org.geysermc.geyser.util.FileUtils; import org.geysermc.geyser.util.WebUtils; -import javax.annotation.Nullable; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; @@ -217,8 +217,7 @@ public class MinecraftLocale { * @param locale Locale to translate to * @return Translated string or null if it was not found in the given locale */ - @Nullable - public static String getLocaleStringIfPresent(String messageText, String locale) { + public static @Nullable String getLocaleStringIfPresent(String messageText, String locale) { Map localeStrings = LOCALE_MAPPINGS.get(locale.toLowerCase(Locale.ROOT)); if (localeStrings != null) { return localeStrings.get(messageText); diff --git a/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java b/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java index 3310859d0..b59b4db8e 100644 --- a/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java +++ b/core/src/main/java/org/geysermc/geyser/text/MinecraftTranslationRegistry.java @@ -26,9 +26,9 @@ package org.geysermc.geyser.text; import net.kyori.adventure.text.renderer.TranslatableComponentRenderer; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; -import javax.annotation.Nonnull; -import javax.annotation.Nullable; import java.text.MessageFormat; import java.util.Locale; import java.util.regex.Matcher; @@ -44,12 +44,12 @@ public class MinecraftTranslationRegistry extends TranslatableComponentRenderer< // Exists to maintain compatibility with Velocity's older Adventure version @Override - public @Nullable MessageFormat translate(@Nonnull String key, @Nonnull String locale) { + public @Nullable MessageFormat translate(@NonNull String key, @NonNull String locale) { return this.translate(key, null, locale); } @Override - protected @Nullable MessageFormat translate(@Nonnull String key, @Nullable String fallback, @Nonnull String locale) { + protected @Nullable MessageFormat translate(@NonNull String key, @Nullable String fallback, @NonNull String locale) { // Get the locale string String localeString = MinecraftLocale.getLocaleStringIfPresent(key, locale); if (localeString == null) { @@ -66,7 +66,7 @@ public class MinecraftTranslationRegistry extends TranslatableComponentRenderer< // Replace the `%s` with numbered inserts `{0}` Pattern p = stringReplacement; Matcher m = p.matcher(localeString); - StringBuffer sb = new StringBuffer(); + StringBuilder sb = new StringBuilder(); int i = 0; while (m.find()) { m.appendReplacement(sb, "{" + (i++) + "}"); @@ -76,7 +76,7 @@ public class MinecraftTranslationRegistry extends TranslatableComponentRenderer< // Replace the `%x$s` with numbered inserts `{x}` p = positionalStringReplacement; m = p.matcher(sb.toString()); - sb = new StringBuffer(); + sb = new StringBuilder(); while (m.find()) { i = Integer.parseInt(m.group(1)) - 1; m.appendReplacement(sb, "{" + i + "}"); diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java index f7e39718b..e82b994c7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/BlockCollision.java @@ -54,7 +54,7 @@ public class BlockCollision { /** * This is used to control the maximum distance a face of a bounding box can push the player away */ - protected double pushAwayTolerance = CollisionManager.COLLISION_TOLERANCE * 1.1; + protected final double pushAwayTolerance = CollisionManager.COLLISION_TOLERANCE * 1.1; protected BlockCollision(BoundingBox[] boxes) { this.boundingBoxes = boxes; diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java deleted file mode 100644 index 7d4dfedc2..000000000 --- a/core/src/main/java/org/geysermc/geyser/translator/collision/SpawnerCollision.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in - * all copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN - * THE SOFTWARE. - * - * @author GeyserMC - * @link https://github.com/GeyserMC/Geyser - */ - -package org.geysermc.geyser.translator.collision; - -import lombok.EqualsAndHashCode; - -@EqualsAndHashCode(callSuper = true) -@CollisionRemapper(regex = "^spawner$") -public class SpawnerCollision extends SolidCollision { - public SpawnerCollision(String params) { - super(params); - // Increase pushAwayTolerance to work around https://bugs.mojang.com/browse/MCPE-41996 - pushAwayTolerance = 0.0002; - } -} diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java index 106613e25..5262f048b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java @@ -129,7 +129,7 @@ public abstract class InventoryTranslator { /** * Should be overwritten in cases where specific inventories should reject an item being in a specific spot. * For examples, looms use this to reject items that are dyes in Bedrock but not in Java. - * + *

* The source/destination slot will be -1 if the cursor is the slot * * @return true if this transfer should be rejected diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 336809e8a..856b22c9b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -68,7 +68,6 @@ import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.text.MessageTranslator; -import javax.annotation.Nonnull; import java.text.DecimalFormat; import java.util.*; @@ -98,7 +97,7 @@ public final class ItemTranslator { ItemStack itemStack = javaItem.translateToJava(data, bedrockItem, mappings); - if (itemStack != null && itemStack.getNbt() != null) { + if (itemStack.getNbt() != null) { javaItem.translateNbtToJava(itemStack.getNbt(), bedrockItem); if (itemStack.getNbt().isEmpty()) { // Otherwise, seems to cause issues with villagers accepting books, and I don't see how this will break anything else. - Camotoy @@ -108,8 +107,7 @@ public final class ItemTranslator { return itemStack; } - @Nonnull - public static ItemData.Builder translateToBedrock(GeyserSession session, int javaId, int count, CompoundTag tag) { + public static ItemData.@NonNull Builder translateToBedrock(GeyserSession session, int javaId, int count, CompoundTag tag) { ItemMapping bedrockItem = session.getItemMappings().getMapping(javaId); if (bedrockItem == ItemMapping.AIR) { session.getGeyser().getLogger().debug("ItemMapping returned air: " + javaId); @@ -118,7 +116,7 @@ public final class ItemTranslator { return translateToBedrock(session, Registries.JAVA_ITEMS.get().get(javaId), bedrockItem, count, tag); } - @Nonnull + @NonNull public static ItemData translateToBedrock(GeyserSession session, ItemStack stack) { if (stack == null) { return ItemData.AIR; @@ -134,8 +132,7 @@ public final class ItemTranslator { .build(); } - @Nonnull - private static ItemData.Builder translateToBedrock(GeyserSession session, Item javaItem, ItemMapping bedrockItem, int count, CompoundTag tag) { + private static ItemData.@NonNull Builder translateToBedrock(GeyserSession session, Item javaItem, ItemMapping bedrockItem, int count, CompoundTag tag) { CompoundTag nbt = tag != null ? tag.clone() : null; if (nbt != null) { @@ -365,7 +362,7 @@ public final class ItemTranslator { * @param canModifyJava the list of items in Java * @return the new list of items in Bedrock */ - private static String[] getCanModify(ListTag canModifyJava) { + private static String @Nullable [] getCanModify(ListTag canModifyJava) { if (canModifyJava != null && canModifyJava.size() > 0) { String[] canModifyBedrock = new String[canModifyJava.size()]; for (int i = 0; i < canModifyBedrock.length; i++) { @@ -384,7 +381,7 @@ public final class ItemTranslator { * Given an item stack, determine the Bedrock item definition that should be applied to Bedrock players. */ @NonNull - public static ItemDefinition getBedrockItemDefinition(GeyserSession session, @Nonnull GeyserItemStack itemStack) { + public static ItemDefinition getBedrockItemDefinition(GeyserSession session, @NonNull GeyserItemStack itemStack) { if (itemStack.isEmpty()) { return ItemDefinition.AIR; } @@ -429,7 +426,7 @@ public final class ItemTranslator { return NbtMap.EMPTY; } - private static Object translateToBedrockNBT(Tag tag) { + private static @Nullable Object translateToBedrockNBT(Tag tag) { if (tag instanceof CompoundTag compoundTag) { return translateNbtToBedrock(compoundTag); } @@ -443,6 +440,7 @@ public final class ItemTranslator { if (!tagList.isEmpty()) { type = NbtType.byClass(tagList.get(0).getClass()); } + //noinspection unchecked,rawtypes return new NbtList(type, tagList); } @@ -473,7 +471,7 @@ public final class ItemTranslator { return javaTag; } - private static Tag translateToJavaNBT(String name, Object object) { + private static @Nullable Tag translateToJavaNBT(String name, Object object) { if (object instanceof int[]) { return new IntArrayTag(name, (int[]) object); } @@ -610,7 +608,7 @@ public final class ItemTranslator { builder.blockDefinition(blockDefinition); } - private static CustomSkull getCustomSkull(GeyserSession session, CompoundTag nbt) { + private static @Nullable CustomSkull getCustomSkull(GeyserSession session, CompoundTag nbt) { if (nbt != null && nbt.contains("SkullOwner")) { if (!(nbt.get("SkullOwner") instanceof CompoundTag skullOwner)) { // It's a username give up d: diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java index c43dfe8bc..07b075690 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/BedrockOnlyBlockEntity.java @@ -25,6 +25,7 @@ package org.geysermc.geyser.translator.level.block.entity; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtList; import org.cloudburstmc.nbt.NbtMap; @@ -57,7 +58,7 @@ public interface BedrockOnlyBlockEntity extends RequiresBlockState { * @param blockState Java BlockState of block. * @return Bedrock tag, or null if not a Bedrock-only Block Entity */ - static NbtMap getTag(GeyserSession session, Vector3i position, int blockState) { + static @Nullable NbtMap getTag(GeyserSession session, Vector3i position, int blockState) { if (FlowerPotBlockEntityTranslator.isFlowerBlock(blockState)) { return FlowerPotBlockEntityTranslator.getTag(session, blockState, position); } else if (PistonBlockEntityTranslator.isBlock(blockState)) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java index db7b3073f..bbe6a0725 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/ShulkerBoxBlockEntityTranslator.java @@ -27,12 +27,11 @@ package org.geysermc.geyser.translator.level.block.entity; import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityType; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMapBuilder; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.translator.inventory.ShulkerInventoryTranslator; -import javax.annotation.Nullable; - @BlockEntity(type = BlockEntityType.SHULKER_BOX) public class ShulkerBoxBlockEntityTranslator extends BlockEntityTranslator implements RequiresBlockState { /** diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java index 7f87f9465..9ac9126db 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SkullBlockEntityTranslator.java @@ -30,6 +30,7 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.IntArrayTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.packet.UpdateBlockPacket; import org.geysermc.geyser.GeyserImpl; @@ -99,7 +100,7 @@ public class SkullBlockEntityTranslator extends BlockEntityTranslator implements return CompletableFuture.completedFuture(texture.getValue()); } - public static BlockDefinition translateSkull(GeyserSession session, CompoundTag tag, Vector3i blockPosition, int blockState) { + public static @Nullable BlockDefinition translateSkull(GeyserSession session, CompoundTag tag, Vector3i blockPosition, int blockState) { CompoundTag owner = tag.get("SkullOwner"); if (owner == null) { session.getSkullCache().removeSkull(blockPosition); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java index bf437311d..29a78daf3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockInventoryTransactionTranslator.java @@ -635,16 +635,16 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator * The position between the intended click position and the player can be determined with two triangles. * First, we compute the difference of the X and Z coordinates: - * + *

* Player position (0, 0) * | * | * | * |_____________ Intended target (-3, 2) - * + *

* We then use the Pythagorean Theorem to find the direct line (hypotenuse) on the XZ plane. Finding the angle of the * triangle from there, closest to the player, gives us our yaw rotation value * Then doing the same using the new XZ distance and Y difference, we can find the direct line of sight from the diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java index f11fd202c..8632dc4e1 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockItemFrameDropItemTranslator.java @@ -37,7 +37,7 @@ import org.geysermc.geyser.translator.protocol.Translator; /** * Pre-1.16.210: used for both survival and creative item frame item removal - * + *

* 1.16.210: only used in creative. */ @Translator(packet = ItemFrameDropItemPacket.class) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java index 58d5c2018..17a80aa39 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/entity/BedrockEntityEventTranslator.java @@ -60,6 +60,6 @@ public class BedrockEntityEventTranslator extends PacketTranslatorissue 3411. Not a perfect solution. */ private static String getEnumDataName(CommandNode node) { if (node.getProperties() instanceof ResourceProperties properties) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java index 56309c058..daf42a68e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginDisconnectTranslator.java @@ -83,8 +83,8 @@ public class JavaLoginDisconnectTranslator extends PacketTranslator children = component.children(); - for (int i = 0; i < children.size(); i++) { - if (children.get(i) instanceof TextComponent child && child.content().startsWith("Outdated server!")) { + for (Component value : children) { + if (value instanceof TextComponent child && child.content().startsWith("Outdated server!")) { // Reproduced on Paper 1.17.1 return true; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java index 71cb6019a..344e06c96 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java @@ -68,6 +68,7 @@ import static org.geysermc.geyser.util.InventoryUtils.LAST_RECIPE_NET_ID; /** * Used to send all valid recipes from Java to Bedrock. + *

* Bedrock REQUIRES a CraftingDataPacket to be sent in order to craft anything. */ @Translator(packet = ClientboundUpdateRecipesPacket.class) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java index 7df6b710c..1aa147314 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaAnimateTranslator.java @@ -56,13 +56,13 @@ public class JavaAnimateTranslator extends PacketTranslator { animatePacket.setAction(AnimatePacket.Action.SWING_ARM); if (entity.getEntityId() == session.getPlayerEntity().getEntityId()) { session.activateArmAnimationTicking(); } - break; - case SWING_OFFHAND: + } + case SWING_OFFHAND -> { // Use the OptionalPack to trigger the animation AnimateEntityPacket offHandPacket = new AnimateEntityPacket(); offHandPacket.setAnimation("animation.player.attack.rotations.offhand"); @@ -71,14 +71,13 @@ public class JavaAnimateTranslator extends PacketTranslator animatePacket.setAction(AnimatePacket.Action.CRITICAL_HIT); + case ENCHANTMENT_CRITICAL_HIT -> { animatePacket.setAction(AnimatePacket.Action.MAGIC_CRITICAL_HIT); // Unsure if this does anything + // Spawn custom particle SpawnParticleEffectPacket stringPacket = new SpawnParticleEffectPacket(); stringPacket.setIdentifier("geyseropt:enchanted_hit_multiple"); @@ -87,13 +86,12 @@ public class JavaAnimateTranslator extends PacketTranslator animatePacket.setAction(AnimatePacket.Action.WAKE_UP); + default -> { session.getGeyser().getLogger().debug("Unhandled java animation: " + animation); return; + } } session.sendUpstreamPacket(animatePacket); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java index 3b93f0df8..cc2b4b030 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/JavaTakeItemEntityTranslator.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.translator.protocol.java.entity; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.ClientboundTakeItemEntityPacket; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.cloudburstmc.protocol.bedrock.packet.TakeItemEntityPacket; import org.geysermc.geyser.entity.type.Entity; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java index 4e8bd89b3..4b0cafed3 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/entity/player/JavaPlayerCombatKillTranslator.java @@ -28,7 +28,6 @@ package org.geysermc.geyser.translator.protocol.java.entity.player; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.entity.player.ClientboundPlayerCombatKillPacket; import org.cloudburstmc.protocol.bedrock.packet.DeathInfoPacket; import net.kyori.adventure.text.Component; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java index fc5d69443..49d043c62 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockDestructionTranslator.java @@ -28,7 +28,6 @@ package org.geysermc.geyser.translator.protocol.java.level; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.level.ClientboundBlockDestructionPacket; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.type.ItemMapping; diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java index 6adb053d7..11d9dbddf 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelParticlesTranslator.java @@ -35,6 +35,7 @@ import com.github.steveice10.mc.protocol.data.game.level.particle.VibrationParti import com.github.steveice10.mc.protocol.data.game.level.particle.positionsource.BlockPositionSource; import com.github.steveice10.mc.protocol.data.game.level.particle.positionsource.EntityPositionSource; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.level.ClientboundLevelParticlesPacket; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; @@ -92,7 +93,7 @@ public class JavaLevelParticlesTranslator extends PacketTranslator createParticle(GeyserSession session, Particle particle) { + private @Nullable Function createParticle(GeyserSession session, Particle particle) { switch (particle.getType()) { case BLOCK -> { int blockState = session.getBlockMappings().getBedrockBlockId(((BlockParticleData) particle.getData()).getBlockState()); diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java index 0146c534e..7b42790ac 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/SoundTranslator.java @@ -38,7 +38,7 @@ public @interface SoundTranslator { /** * The identifier(s) that the placed block must contain * one of. Leave empty to ignore. - * + *

* Only applies to interaction handlers that are an * instance of {@link BlockSoundInteractionTranslator}. * diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java index 450078362..e77539e6e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/ComparatorSoundInteractionTranslator.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.translator.sound.block; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.sound.BlockSoundInteractionTranslator; diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java index 107807fe0..8f8ab8bf6 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/DoorSoundInteractionTranslator.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.translator.sound.block; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.sound.BlockSoundInteractionTranslator; diff --git a/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java index 08a8792e8..17b8768bc 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/sound/block/LeverSoundInteractionTranslator.java @@ -27,7 +27,6 @@ package org.geysermc.geyser.translator.sound.block; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; -import org.cloudburstmc.protocol.bedrock.data.LevelEventType; import org.cloudburstmc.protocol.bedrock.packet.LevelEventPacket; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.sound.BlockSoundInteractionTranslator; diff --git a/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java index 5f811ab49..d93123cff 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/text/MessageTranslator.java @@ -201,7 +201,7 @@ public class MessageTranslator { /** * Verifies the message is valid JSON in case it's plaintext. Works around GsonComponentSerializer not using lenient mode. - * See https://wiki.vg/Chat for messages sent in lenient mode, and for a description on leniency. + * See here for messages sent in lenient mode, and for a description on leniency. * * @param message Potentially lenient JSON message * @param locale Locale to use for translation strings diff --git a/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java b/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java index 17502eae8..e1fe6e6f2 100644 --- a/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/AttributeUtils.java @@ -32,7 +32,7 @@ import com.github.steveice10.mc.protocol.data.game.entity.attribute.ModifierOper public class AttributeUtils { /** * Retrieve the base attribute value with all modifiers applied. - * https://minecraft.wiki/w/Attribute#Modifiers + * See here * @param attribute The attribute to calculate the total value. * @return The finished attribute with all modifiers applied. */ diff --git a/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java index 9964ed08b..31a2ddee9 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockEntityUtils.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.util; import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityType; +import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.protocol.bedrock.packet.BlockEntityDataPacket; @@ -35,7 +36,6 @@ import org.geysermc.geyser.translator.level.block.entity.BedrockOnlyBlockEntity; import org.geysermc.geyser.translator.level.block.entity.BlockEntityTranslator; import org.geysermc.geyser.translator.level.block.entity.FlowerPotBlockEntityTranslator; -import javax.annotation.Nonnull; import java.util.List; import java.util.Locale; import java.util.Map; @@ -83,7 +83,7 @@ public class BlockEntityUtils { return Registries.BLOCK_ENTITIES.get(type); } - public static void updateBlockEntity(GeyserSession session, @Nonnull NbtMap blockEntity, Vector3i position) { + public static void updateBlockEntity(GeyserSession session, @NonNull NbtMap blockEntity, Vector3i position) { BlockEntityDataPacket blockEntityPacket = new BlockEntityDataPacket(); blockEntityPacket.setBlockPosition(position); blockEntityPacket.setData(blockEntity); diff --git a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java index 23949d020..81a67a521 100644 --- a/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/BlockUtils.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.util; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.geysermc.geyser.inventory.GeyserItemStack; import org.geysermc.geyser.inventory.PlayerInventory; @@ -36,8 +37,6 @@ import org.geysermc.geyser.registry.type.ItemMapping; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.translator.collision.BlockCollision; -import javax.annotation.Nullable; - public final class BlockUtils { private static boolean correctTool(GeyserSession session, BlockMapping blockMapping, String itemToolType) { diff --git a/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java b/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java index c00e389fd..60838686f 100644 --- a/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/CooldownUtils.java @@ -35,7 +35,7 @@ import java.util.concurrent.TimeUnit; /** * Manages the sending of a cooldown indicator to the Bedrock player as there is no cooldown indicator in Bedrock. - * Much of the work here is from the wonderful folks from ViaRewind: https://github.com/ViaVersion/ViaRewind + * Much of the work here is from the wonderful folks from ViaRewind */ public class CooldownUtils { private static CooldownType DEFAULT_SHOW_COOLDOWN; diff --git a/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java index 622722e5a..9f7bd9e61 100644 --- a/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/CpuUtils.java @@ -49,7 +49,7 @@ public final class CpuUtils { /** * Much of the code here was copied from the OSHI project. This is simply stripped down to only get the CPU model. - * https://github.com/oshi/oshi/ + * See here */ private static String getLinuxProcessorName() throws Exception { List lines = Files.readAllLines(Paths.get("/proc/cpuinfo"), StandardCharsets.UTF_8); @@ -64,7 +64,7 @@ public final class CpuUtils { } /** - * https://stackoverflow.com/a/6327663 + * See here */ private static String getWindowsProcessorName() throws Exception { final String cpuNameCmd = "reg query \"HKLM\\HARDWARE\\DESCRIPTION\\System\\CentralProcessor\\0\" /v ProcessorNameString"; @@ -83,7 +83,7 @@ public final class CpuUtils { int p = result.indexOf(regstrToken); if (p == -1) { - return null; + return "unknown"; } return result.substring(p + regstrToken.length()).trim(); diff --git a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java index 99e8f8d7d..c8cd31058 100644 --- a/core/src/main/java/org/geysermc/geyser/util/FileUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/FileUtils.java @@ -79,7 +79,7 @@ public class FileUtils { //noinspection ResultOfMethodCallIgnored file.createNewFile(); try (FileOutputStream fos = new FileOutputStream(file)) { - try (InputStream input = bootstrap.getResource(name)) { + try (InputStream input = bootstrap.getResourceOrThrow(name)) { byte[] bytes = new byte[input.available()]; //noinspection ResultOfMethodCallIgnored @@ -170,7 +170,7 @@ public class FileUtils { * @return the byte array of an InputStream */ public static byte[] readAllBytes(String resource) { - try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResource(resource)) { + try (InputStream stream = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow(resource)) { return stream.readAllBytes(); } catch (IOException e) { throw new RuntimeException("Error while trying to read internal input stream!", e); @@ -225,7 +225,7 @@ public class FileUtils { * @return a set of all the classes annotated by the given annotation */ public static Set> getGeneratedClassesForAnnotation(String input) { - try (InputStream annotatedClass = GeyserImpl.getInstance().getBootstrap().getResource(input); + try (InputStream annotatedClass = GeyserImpl.getInstance().getBootstrap().getResourceOrThrow(input); BufferedReader reader = new BufferedReader(new InputStreamReader(annotatedClass))) { return reader.lines().map(className -> { try { diff --git a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java index 0348eca11..f1bf03d90 100644 --- a/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/InventoryUtils.java @@ -31,6 +31,7 @@ import com.github.steveice10.mc.protocol.data.game.recipe.Ingredient; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundPickItemPacket; import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundSetCreativeModeSlotPacket; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -53,6 +54,7 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.BedrockDimension; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMapping; +import org.geysermc.geyser.registry.type.ItemMappings; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.GeyserLocale; @@ -60,7 +62,6 @@ import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.inventory.LecternInventoryTranslator; import org.geysermc.geyser.translator.inventory.chest.DoubleChestInventoryTranslator; -import javax.annotation.Nullable; import java.util.Arrays; import java.util.Collections; import java.util.Objects; @@ -129,7 +130,7 @@ public class InventoryUtils { session.setOpenInventory(null); } - public static Inventory getInventory(GeyserSession session, int javaId) { + public static @Nullable Inventory getInventory(GeyserSession session, int javaId) { if (javaId == 0) { return session.getPlayerInventory(); } else { @@ -207,12 +208,13 @@ public class InventoryUtils { } private static ItemDefinition getUnusableSpaceBlockDefinition(int protocolVersion) { + ItemMappings mappings = Registries.ITEMS.forVersion(protocolVersion); String unusableSpaceBlock = GeyserImpl.getInstance().getConfig().getUnusableSpaceBlock(); - ItemDefinition itemDefinition = Registries.ITEMS.forVersion(protocolVersion).getDefinition(unusableSpaceBlock); + ItemDefinition itemDefinition = mappings.getDefinition(unusableSpaceBlock); if (itemDefinition == null) { GeyserImpl.getInstance().getLogger().error("Invalid value " + unusableSpaceBlock + ". Resorting to barrier block."); - return Registries.ITEMS.forVersion(protocolVersion).getStoredItems().barrier().getBedrockDefinition(); + return mappings.getStoredItems().barrier().getBedrockDefinition(); } else { return itemDefinition; } @@ -284,7 +286,7 @@ public class InventoryUtils { * If it is found in another part of the inventory, move it. * If it is not found and the user is in creative mode, create the item, * overriding the current item slot if no other hotbar slots are empty, or otherwise selecting the empty slot. - * + *

* This attempts to mimic Java Edition behavior as best as it can. * @param session the Bedrock client's session * @param itemName the Java identifier of the item to search/select @@ -455,6 +457,7 @@ public class InventoryUtils { for (int col = firstCol; col < width + firstCol; col++) { GeyserItemStack geyserItemStack = inventoryGetter.apply(col + (row * gridDimensions) + 1); if (geyserItemStack.isEmpty()) { + //noinspection ConstantValue inventoryHasItem = itemStack == null || itemStack.getId() == 0; if (inventoryHasItem) { break crafting; @@ -476,6 +479,7 @@ public class InventoryUtils { return null; } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") private static boolean testShapedRecipe(final Ingredient[] ingredients, final IntFunction inventoryGetter, final int gridDimensions, final int firstRow, final int height, final int firstCol, final int width) { int ingredientIndex = 0; diff --git a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java index c528de741..a116c5cf2 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ItemUtils.java @@ -29,12 +29,11 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.FishingRodItem; import org.geysermc.geyser.item.type.Item; -import javax.annotation.Nullable; - public class ItemUtils { public static int getEnchantmentLevel(@Nullable CompoundTag itemNBTData, String enchantmentId) { @@ -74,7 +73,7 @@ public class ItemUtils { * @param itemTag the NBT tag of the item * @return the custom name of the item */ - public static String getCustomName(CompoundTag itemTag) { + public static @Nullable String getCustomName(CompoundTag itemTag) { if (itemTag != null) { if (itemTag.get("display") instanceof CompoundTag displayTag) { if (displayTag.get("Name") instanceof StringTag nameTag) { diff --git a/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java b/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java index f0b8ee6bc..795d45490 100644 --- a/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java +++ b/core/src/main/java/org/geysermc/geyser/util/JavaCodecUtil.java @@ -28,8 +28,8 @@ package org.geysermc.geyser.util; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.ListTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.NonNull; -import javax.annotation.Nonnull; import java.util.Iterator; public final class JavaCodecUtil { @@ -41,7 +41,7 @@ public final class JavaCodecUtil { ListTag value = tag.get("value"); Iterator originalIterator = value.iterator(); return new Iterable<>() { - @Nonnull + @NonNull @Override public Iterator iterator() { return new Iterator<>() { diff --git a/core/src/main/java/org/geysermc/geyser/util/Metrics.java b/core/src/main/java/org/geysermc/geyser/util/Metrics.java index e88d5a971..a4ef301e3 100644 --- a/core/src/main/java/org/geysermc/geyser/util/Metrics.java +++ b/core/src/main/java/org/geysermc/geyser/util/Metrics.java @@ -29,6 +29,8 @@ import com.fasterxml.jackson.databind.JsonNode; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; import javax.net.ssl.HttpsURLConnection; @@ -48,8 +50,8 @@ import java.util.zip.GZIPOutputStream; /** * bStats collects some data for plugin authors. - * - * Check out https://bStats.org/ to learn more about bStats! + *

+ * Check out bStats to learn more about bStats! */ public class Metrics { @@ -140,7 +142,7 @@ public class Metrics { } customCharts.add(chart); } - data.put("customCharts", customCharts); + data.set("customCharts", customCharts); return data; } @@ -233,10 +235,7 @@ public class Metrics { * @return The gzipped String. * @throws IOException If the compression failed. */ - private static byte[] compress(final String str) throws IOException { - if (str == null) { - return null; - } + private static byte @NonNull [] compress(final @NonNull String str) throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); GZIPOutputStream gzip = new GZIPOutputStream(outputStream); gzip.write(str.getBytes(StandardCharsets.UTF_8)); @@ -264,7 +263,7 @@ public class Metrics { this.chartId = chartId; } - private ObjectNode getRequestJsonNode() { + private @Nullable ObjectNode getRequestJsonNode() { ObjectNode chart = new ObjectMapper().createObjectNode(); chart.put("chartId", chartId); try { @@ -308,7 +307,7 @@ public class Metrics { } @Override - protected ObjectNode getChartData() throws Exception { + protected @Nullable ObjectNode getChartData() throws Exception { ObjectNode data = mapper.createObjectNode(); String value = callable.call(); if (value == null || value.isEmpty()) { @@ -339,7 +338,7 @@ public class Metrics { } @Override - protected ObjectNode getChartData() throws Exception { + protected @Nullable ObjectNode getChartData() throws Exception { ObjectNode data = mapper.createObjectNode(); ObjectNode values = mapper.createObjectNode(); Map map = callable.call(); @@ -383,7 +382,7 @@ public class Metrics { } @Override - public ObjectNode getChartData() throws Exception { + public @Nullable ObjectNode getChartData() throws Exception { ObjectNode data = mapper.createObjectNode(); ObjectNode values = mapper.createObjectNode(); Map> map = callable.call(); @@ -432,7 +431,7 @@ public class Metrics { } @Override - protected ObjectNode getChartData() throws Exception { + protected @Nullable ObjectNode getChartData() throws Exception { ObjectNode data = mapper.createObjectNode(); int value = callable.call(); if (value == 0) { @@ -445,135 +444,4 @@ public class Metrics { } - /** - * Represents a custom multi line chart. - */ - public static class MultiLineChart extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public MultiLineChart(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected ObjectNode getChartData() throws Exception { - ObjectNode data = mapper.createObjectNode(); - ObjectNode values = mapper.createObjectNode(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean allSkipped = true; - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue() == 0) { - continue; // Skip this invalid - } - allSkipped = false; - values.put(entry.getKey(), entry.getValue()); - } - if (allSkipped) { - // Null = skip the chart - return null; - } - data.putPOJO("values", values); - return data; - } - - } - - /** - * Represents a custom simple bar chart. - */ - public static class SimpleBarChart extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public SimpleBarChart(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected ObjectNode getChartData() throws Exception { - ObjectNode data = mapper.createObjectNode(); - ObjectNode values = mapper.createObjectNode(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - for (Map.Entry entry : map.entrySet()) { - ArrayNode categoryValues = mapper.createArrayNode(); - categoryValues.add(entry.getValue()); - values.putPOJO(entry.getKey(), categoryValues); - } - data.putPOJO("values", values); - return data; - } - - } - - /** - * Represents a custom advanced bar chart. - */ - public static class AdvancedBarChart extends CustomChart { - - private final Callable> callable; - - /** - * Class constructor. - * - * @param chartId The id of the chart. - * @param callable The callable which is used to request the chart data. - */ - public AdvancedBarChart(String chartId, Callable> callable) { - super(chartId); - this.callable = callable; - } - - @Override - protected ObjectNode getChartData() throws Exception { - ObjectNode data = mapper.createObjectNode(); - ObjectNode values = mapper.createObjectNode(); - Map map = callable.call(); - if (map == null || map.isEmpty()) { - // Null = skip the chart - return null; - } - boolean allSkipped = true; - for (Map.Entry entry : map.entrySet()) { - if (entry.getValue().length == 0) { - continue; // Skip this invalid - } - allSkipped = false; - ArrayNode categoryValues = mapper.createArrayNode(); - for (int categoryValue : entry.getValue()) { - categoryValues.add(categoryValue); - } - values.putPOJO(entry.getKey(), categoryValues); - } - if (allSkipped) { - // Null = skip the chart - return null; - } - data.putPOJO("values", values); - return data; - } - - } } \ No newline at end of file diff --git a/core/src/main/java/org/geysermc/geyser/util/SignUtils.java b/core/src/main/java/org/geysermc/geyser/util/SignUtils.java index fd2d98ba9..3a4ec4f2c 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SignUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SignUtils.java @@ -25,8 +25,6 @@ package org.geysermc.geyser.util; -import org.geysermc.geyser.level.block.BlockStateValues; - /** * Provides utilities for interacting with signs. Mainly, it deals with the widths of each character. * Since Bedrock auto-wraps signs and Java does not, we have to take this into account when translating signs. diff --git a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java index b56d9873b..4c5f6b68f 100644 --- a/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/SoundUtils.java @@ -26,6 +26,7 @@ package org.geysermc.geyser.util; import com.github.steveice10.mc.protocol.data.game.level.sound.Sound; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.protocol.bedrock.data.LevelEvent; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; @@ -50,7 +51,7 @@ public final class SoundUtils { * @param sound the sound name * @return a sound event from the given sound */ - private static SoundEvent toSoundEvent(String sound) { + private static @Nullable SoundEvent toSoundEvent(String sound) { try { return SoundEvent.valueOf(sound.toUpperCase(Locale.ROOT).replace(".", "_")); } catch (Exception ex) { diff --git a/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java b/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java index c0fd10232..cf90a6bcd 100644 --- a/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/VersionCheckUtils.java @@ -31,6 +31,7 @@ import net.kyori.adventure.text.TextReplacementConfig; import net.kyori.adventure.text.event.ClickEvent; import net.kyori.adventure.text.format.NamedTextColor; import net.kyori.adventure.text.format.TextDecoration; +import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.GeyserLogger; @@ -38,7 +39,6 @@ import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.text.GeyserLocale; -import javax.annotation.Nonnull; import java.util.OptionalInt; import java.util.concurrent.CompletableFuture; import java.util.function.Supplier; @@ -46,7 +46,8 @@ import java.util.regex.Matcher; import java.util.regex.Pattern; public final class VersionCheckUtils { - private static @Nonnull OptionalInt LATEST_BEDROCK_RELEASE = OptionalInt.empty(); + @SuppressWarnings("OptionalUsedAsFieldOrParameterType") + private static @NonNull OptionalInt LATEST_BEDROCK_RELEASE = OptionalInt.empty(); private static final int SUPPORTED_JAVA_VERSION = 17; public static void checkForOutdatedFloodgate(GeyserLogger logger) { @@ -125,7 +126,7 @@ public final class VersionCheckUtils { }); } - public static @Nonnull OptionalInt getLatestBedrockRelease() { + public static @NonNull OptionalInt getLatestBedrockRelease() { return LATEST_BEDROCK_RELEASE; } diff --git a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java index e4a98b3fc..fbcbd4a3c 100644 --- a/core/src/main/java/org/geysermc/geyser/util/WebUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/WebUtils.java @@ -26,9 +26,9 @@ package org.geysermc.geyser.util; import com.fasterxml.jackson.databind.JsonNode; +import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserImpl; -import javax.annotation.Nullable; import javax.naming.directory.Attribute; import javax.naming.directory.InitialDirContext; import java.io.*; @@ -101,7 +101,7 @@ public class WebUtils { * @param reqURL URL to post to * @param postContent String data to post * @return String returned by the server - * @throws IOException + * @throws IOException If the request fails */ public static String post(String reqURL, String postContent) throws IOException { URL url = new URL(reqURL); @@ -123,7 +123,7 @@ public class WebUtils { * * @param con The connection to get the string from * @return The body of the returned page - * @throws IOException + * @throws IOException If the request fails */ private static String connectionToString(HttpURLConnection con) throws IOException { // Send the request (we dont use this but its required for getErrorStream() to work) @@ -156,7 +156,7 @@ public class WebUtils { * @param reqURL URL to post to * @param fields Form data to post * @return String returned by the server - * @throws IOException + * @throws IOException If the request fails */ public static String postForm(String reqURL, Map fields) throws IOException { URL url = new URL(reqURL); @@ -169,15 +169,14 @@ public class WebUtils { try (OutputStream out = con.getOutputStream()) { // Write the form data to the output for (Map.Entry field : fields.entrySet()) { - out.write((field.getKey() + "=" + URLEncoder.encode(field.getValue(), StandardCharsets.UTF_8.toString()) + "&").getBytes(StandardCharsets.UTF_8)); + out.write((field.getKey() + "=" + URLEncoder.encode(field.getValue(), StandardCharsets.UTF_8) + "&").getBytes(StandardCharsets.UTF_8)); } } return connectionToString(con); } - @Nullable - public static String[] findSrvRecord(GeyserImpl geyser, String remoteAddress) { + public static String @Nullable [] findSrvRecord(GeyserImpl geyser, String remoteAddress) { try { // Searches for a server address and a port from a SRV record of the specified host name InitialDirContext ctx = new InitialDirContext(); diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java index 832a7bcae..dc4545529 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2BooleanMap.java @@ -28,7 +28,13 @@ package org.geysermc.geyser.util.collection; import it.unimi.dsi.fastutil.ints.AbstractInt2BooleanMap; import it.unimi.dsi.fastutil.objects.ObjectSet; +import java.io.Serial; + public class FixedInt2BooleanMap extends AbstractInt2BooleanMap { + + @Serial + private static final long serialVersionUID = 1L; + protected boolean[] value; protected int start = -1; diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java index ee37d612f..46cb2a2ca 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2ByteMap.java @@ -29,7 +29,13 @@ import it.unimi.dsi.fastutil.ints.AbstractInt2ByteMap; import it.unimi.dsi.fastutil.ints.Int2ByteMap; import it.unimi.dsi.fastutil.objects.ObjectSet; +import java.io.Serial; + public class FixedInt2ByteMap extends AbstractInt2ByteMap { + + @Serial + private static final long serialVersionUID = 1L; + protected byte[] value; protected int start = -1; diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java index f5bd89d64..4a27d51a9 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/FixedInt2IntMap.java @@ -29,10 +29,15 @@ import it.unimi.dsi.fastutil.ints.AbstractInt2IntMap; import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.objects.ObjectSet; +import java.io.Serial; + public class FixedInt2IntMap extends AbstractInt2IntMap { protected int[] value; protected int start = -1; + @Serial + private static final long serialVersionUID = 1L; + @Override public int size() { return value.length; diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java b/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java index bafb2924c..42d0da803 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/LecternHasBookMap.java @@ -32,11 +32,16 @@ import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.util.BlockEntityUtils; +import java.io.Serial; + /** * Map that takes advantage of its internals for fast operations on block states to determine if they are lecterns. */ public class LecternHasBookMap extends FixedInt2BooleanMap { + @Serial + private static final long serialVersionUID = 1L; + /** * Update a potential lectern within the world. This is a map method so it can use the internal fields to * optimize lectern determining. diff --git a/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java b/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java index e17a38877..46fa5df11 100644 --- a/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java +++ b/core/src/main/java/org/geysermc/geyser/util/collection/package-info.java @@ -25,7 +25,7 @@ /** * Contains useful collections for use in Geyser. - * + *

* Of note are the fixed int maps. Designed for use with block states that are positive and sequential, they do not allow keys to be * added that are not greater by one versus the previous key. Because of this, speedy operations of {@link java.util.Map#get(java.lang.Object)} * and {@link java.util.Map#containsKey(java.lang.Object)} can be performed by simply checking the bounds of the map From c0f6a2b926900bfed8e99fb4ad25c978cf98bab3 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 6 Dec 2023 08:26:20 +0100 Subject: [PATCH 34/86] Add more info to Fabric's geyser dumps (#4175) * Added onlineMode, platformName, and Minecraft version to dump - renames platformVersion to loaderVersion since that is more fitting to modded structure * rename loaderVersion back to platformVersion * address review by @Konicai * Fix geyser dump creation (regression from the syntax/annotation PR) --- .../geyser/platform/fabric/GeyserFabricDumpInfo.java | 8 +++++++- .../java/org/geysermc/geyser/text/AsteriskSerializer.java | 5 +++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java index ee986ee62..75da9125f 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricDumpInfo.java @@ -43,21 +43,27 @@ import java.util.stream.Collectors; @Getter public class GeyserFabricDumpInfo extends BootstrapDumpInfo { - private String platformVersion = null; + private final String platformName; + private String platformVersion; + private final String minecraftVersion; private final EnvType environmentType; @AsteriskSerializer.Asterisk(isIp = true) private final String serverIP; private final int serverPort; + private final boolean onlineMode; private final List mods; public GeyserFabricDumpInfo(MinecraftServer server) { + this.platformName = server.getServerModName(); FabricLoader.getInstance().getModContainer("fabricloader").ifPresent(mod -> this.platformVersion = mod.getMetadata().getVersion().getFriendlyString()); + this.minecraftVersion = server.getServerVersion(); this.environmentType = FabricLoader.getInstance().getEnvironmentType(); this.serverIP = server.getLocalIp() == null ? "unknown" : server.getLocalIp(); this.serverPort = server.getPort(); + this.onlineMode = server.usesAuthentication(); this.mods = new ArrayList<>(); for (ModContainer mod : FabricLoader.getInstance().getAllMods()) { diff --git a/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java b/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java index 702fded92..66b61dbff 100644 --- a/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java +++ b/core/src/main/java/org/geysermc/geyser/text/AsteriskSerializer.java @@ -68,6 +68,11 @@ public class AsteriskSerializer extends StdSerializer implements Context String asterisk; boolean isIp; + @SuppressWarnings("unused") // Used by Jackson for Geyser dumps + public AsteriskSerializer() { + super(Object.class); + } + public AsteriskSerializer(String asterisk, boolean isIp) { super(Object.class); this.asterisk = asterisk; From 94a1cbeb832fddd265711e798481c6cf17a691af Mon Sep 17 00:00:00 2001 From: TheFloyds4240 <80289503+TheFloyds4240@users.noreply.github.com> Date: Wed, 6 Dec 2023 03:50:16 -0500 Subject: [PATCH 35/86] Default motd and player count passthrough config values to true(#2523) * Update config.yml I will in no way be offended if this is not merged. Essentially, it makes Geyser slightly more configured at the start for plugin versions by forwarding more information about the server to Bedrock players. * remove unused --------- Co-authored-by: onebeastchris --- core/src/main/resources/config.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index 218e13833..b10c2788e 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -90,9 +90,9 @@ command-suggestions: true # The following three options enable "ping passthrough" - the MOTD, player count and/or protocol name gets retrieved from the Java server. # Relay the MOTD from the remote server to Bedrock players. -passthrough-motd: false +passthrough-motd: true # Relay the player count and max players from the remote server to Bedrock players. -passthrough-player-counts: false +passthrough-player-counts: true # Enable LEGACY ping passthrough. There is no need to enable this unless your MOTD or player count does not appear properly. # This option does nothing on standalone. legacy-ping-passthrough: false From 9d6dd58fd83fdec2bdfc764902348fa885b06e31 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 6 Dec 2023 22:22:21 +0100 Subject: [PATCH 36/86] Ensure executor service isn't null by accessing it via the getter (#4328) --- .../main/java/org/geysermc/geyser/skin/FakeHeadProvider.java | 2 +- core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java index 4ae30be19..c7bd235b2 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/FakeHeadProvider.java @@ -134,7 +134,7 @@ public class FakeHeadProvider { session.getPlayerWithCustomHeads().add(entity.getUuid()); String texturesProperty = entity.getTexturesProperty(); - SkinProvider.EXECUTOR_SERVICE.execute(() -> { + SkinProvider.getExecutorService().execute(() -> { try { SkinProvider.SkinData mergedSkinData = MERGED_SKINS_LOADING_CACHE.get(new FakeHeadEntry(texturesProperty, fakeHeadSkinUrl, entity)); SkinManager.sendSkinPacket(session, entity, mergedSkinData); diff --git a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java index 23985c33f..12a1e8b2b 100644 --- a/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java +++ b/core/src/main/java/org/geysermc/geyser/skin/SkinProvider.java @@ -58,7 +58,7 @@ import java.util.function.Predicate; public class SkinProvider { private static final boolean ALLOW_THIRD_PARTY_CAPES = GeyserImpl.getInstance().getConfig().isAllowThirdPartyCapes(); - static ExecutorService EXECUTOR_SERVICE; + private static ExecutorService EXECUTOR_SERVICE; static final Skin EMPTY_SKIN; static final Cape EMPTY_CAPE = new Cape("", "no-cape", ByteArrays.EMPTY_ARRAY, -1, true); @@ -133,7 +133,7 @@ public class SkinProvider { WEARING_CUSTOM_SKULL_SLIM = new SkinGeometry("{\"geometry\" :{\"default\" :\"geometry.humanoid.wearingCustomSkullSlim\"}}", wearingCustomSkullSlim, false); } - private static ExecutorService getExecutorService() { + public static ExecutorService getExecutorService() { if (EXECUTOR_SERVICE == null) { EXECUTOR_SERVICE = Executors.newFixedThreadPool(ALLOW_THIRD_PARTY_CAPES ? 21 : 14); } From 39716508566431e230578ba64f2d479f47a75cfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=8D=83=E9=A3=9E=E5=A4=8F?= Date: Thu, 7 Dec 2023 16:57:30 +0800 Subject: [PATCH 37/86] Fix collision problem with glass pane and iron bars (#4302) * Fix collision problem,the wide for bedrock is 0.5 but for java is 0.5625 when only one side connect. * Fixed an issue where the collision box was abnormal at the corner when two sides of the glass panel were connected. * Merge similar methods, adjust code. * More lenient judgment; reduce redundant code to avoid repeated calls. --- .../GlassPaneAndIronBarsCollision.java | 112 ++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/collision/GlassPaneAndIronBarsCollision.java diff --git a/core/src/main/java/org/geysermc/geyser/translator/collision/GlassPaneAndIronBarsCollision.java b/core/src/main/java/org/geysermc/geyser/translator/collision/GlassPaneAndIronBarsCollision.java new file mode 100644 index 000000000..14439645a --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/collision/GlassPaneAndIronBarsCollision.java @@ -0,0 +1,112 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.collision; + +import lombok.EqualsAndHashCode; +import org.geysermc.geyser.level.physics.BoundingBox; +import org.geysermc.geyser.session.GeyserSession; + +@EqualsAndHashCode(callSuper = true) +@CollisionRemapper(regex = "glass_pane$|iron_bars$", usesParams = true, passDefaultBoxes = true) +public class GlassPaneAndIronBarsCollision extends BlockCollision { + /** + * 1 = north + * 2 = east + * 3 = south + * 4 = west + * 5 = north, east + * 6 = east, south + * 7 = south, west + * 8 = west, north + */ + private int facing; + + public GlassPaneAndIronBarsCollision(String params, BoundingBox[] defaultBoxes) { + super(defaultBoxes); + //east=true,north=true,south=true,west=true + if (params.contains("north=true") && params.contains("east=true")) { + facing = 5; + } else if (params.contains("east=true") && params.contains("south=true")) { + facing = 6; + } else if (params.contains("south=true") && params.contains("west=true")) { + facing = 7; + } else if (params.contains("west=true") && params.contains("north=true")) { + facing = 8; + } else if (params.contains("north=true")) { + facing = 1; + } else if (params.contains("east=true")) { + facing = 2; + } else if (params.contains("south=true")) { + facing = 3; + } else if (params.contains("west=true")) { + facing = 4; + } + } + + @Override + public boolean correctPosition(GeyserSession session, int x, int y, int z, BoundingBox playerCollision) { + boolean result = super.correctPosition(session, x, y, z, playerCollision); + playerCollision.setSizeX(playerCollision.getSizeX() - 0.0001); + playerCollision.setSizeY(playerCollision.getSizeY() - 0.0001); + playerCollision.setSizeZ(playerCollision.getSizeZ() - 0.0001); + + if (this.checkIntersection(x, y, z, playerCollision)) { + double newMiddleX = x; + double newMiddleZ = z; + + switch (facing) { + case 1 -> newMiddleZ += 0.8625; // North + case 2 -> newMiddleX += 0.1375; // East + case 3 -> newMiddleZ += 0.1375; // South + case 4 -> newMiddleX += 0.8625; // West + case 5 -> { // North, East + newMiddleZ += 0.8625; + newMiddleX += 0.1375; + } + case 6 -> { // East, South + newMiddleX += 0.1375; + newMiddleZ += 0.1375; + } + case 7 -> { // South, West + newMiddleZ += 0.1375; + newMiddleX += 0.8625; + } + case 8 -> { // West, North + newMiddleX += 0.8625; + newMiddleZ += 0.8625; + } + } + + playerCollision.setMiddleX(newMiddleX); + playerCollision.setMiddleZ(newMiddleZ); + } + + playerCollision.setSizeX(playerCollision.getSizeX() + 0.0001); + playerCollision.setSizeY(playerCollision.getSizeY() + 0.0001); + playerCollision.setSizeZ(playerCollision.getSizeZ() + 0.0001); + return result; + } +} From 1499def4a3e4ed17c4752b9bdeb6099522463a97 Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 7 Dec 2023 20:27:25 +0100 Subject: [PATCH 38/86] Catch UnknownHostExceptions in legacy ping passthrough pings (#4331) * Catch unknownhostexception to avoid network errors when using legacy ping passthrough * Catch UnknownHostException separately, log a warning but no stacktrace --- .../org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java index 64ad2c445..6bbca11ca 100644 --- a/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java +++ b/core/src/main/java/org/geysermc/geyser/ping/GeyserLegacyPingPassthrough.java @@ -139,6 +139,9 @@ public class GeyserLegacyPingPassthrough implements IGeyserPingPassthrough, Runn this.geyser.getLogger().debug("Connection timeout for ping passthrough."); } catch (JsonParseException | JsonMappingException ex) { this.geyser.getLogger().error("Failed to parse json when pinging server!", ex); + } catch (UnknownHostException ex) { + // Don't reset pingInfo, as we want to keep the last known value + this.geyser.getLogger().warning("Unable to resolve remote host! Is the remote server down or invalid?"); } catch (IOException e) { this.geyser.getLogger().error("IO error while trying to use legacy ping passthrough", e); } From f1e7ef92f4d63a4f6d6cbff23022c7723647a7a9 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 11 Dec 2023 18:12:19 +0100 Subject: [PATCH 39/86] Fix issues with the ConnectionTestCommand (#4333) - Port out of bounds checking - Proper encoding of ip's to check - Don't assume "cache" response is nonnull; it is null when there's an error - Send users the error message that we get when server is unreachable --- .../defaults/ConnectionTestCommand.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java index 4cda72c9b..ad51826c3 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java @@ -36,6 +36,8 @@ import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.LoopbackUtil; import org.geysermc.geyser.util.WebUtils; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; import java.util.Random; import java.util.concurrent.CompletableFuture; @@ -104,6 +106,12 @@ public class ConnectionTestCommand extends GeyserCommand { return; } + // Issue: port out of bounds + if (port <= 0 || port >= 65535) { + sender.sendMessage("The port you specified is invalid! Please specify a valid port."); + return; + } + // Issue: do the ports not line up? if (port != geyser.getConfig().getBedrock().port()) { if (fullAddress.length == 2) { @@ -161,20 +169,21 @@ public class ConnectionTestCommand extends GeyserCommand { sender.sendMessage("Testing server connection now. Please wait..."); JsonNode output; try { - output = WebUtils.getJson("https://checker.geysermc.org/ping?hostname=" + ip + "&port=" + port); + String hostname = URLEncoder.encode(ip, StandardCharsets.UTF_8); + output = WebUtils.getJson("https://checker.geysermc.org/ping?hostname=" + hostname + "&port=" + port); } finally { CONNECTION_TEST_MOTD = null; } - JsonNode cache = output.get("cache"); - String when; - if (cache.get("fromCache").asBoolean()) { - when = cache.get("secondsSince").asInt() + " seconds ago"; - } else { - when = "now"; - } - if (output.get("success").asBoolean()) { + JsonNode cache = output.get("cache"); + String when; + if (cache.get("fromCache").asBoolean()) { + when = cache.get("secondsSince").asInt() + " seconds ago"; + } else { + when = "now"; + } + JsonNode ping = output.get("ping"); JsonNode pong = ping.get("pong"); String remoteMotd = pong.get("motd").asText(); @@ -196,7 +205,11 @@ public class ConnectionTestCommand extends GeyserCommand { return; } - sender.sendMessage("Your server is likely unreachable from outside the network as of " + when + "."); + sender.sendMessage("Your server is likely unreachable from outside the network!"); + JsonNode message = output.get("message"); + if (message != null && !message.asText().isEmpty()) { + sender.sendMessage("Got the error message: " + message.asText()); + } sendLinks(sender); } catch (Exception e) { sender.sendMessage("An error occurred while trying to check your connection! Check the console for more information."); From d63a70daa9604193d78824b6fb8c2ad3f9923b14 Mon Sep 17 00:00:00 2001 From: kyrptonaught Date: Mon, 11 Dec 2023 18:20:25 -0500 Subject: [PATCH 40/86] Add support for adding custom translations. (#4047) * Add support for loading locale overwrites. Any lang files in this new folder will be appended to the main lang file when loaded. * A locale will no longer attempt to be downloaded and loaded if it already is loaded. Previously a lang file was reloaded everytime a player joins. * Switch some io bits to nio * formatting fixes * Update core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java * Rename isLocalLoaded to isLocaleLoaded * Rename overwrites to overrides * Catch separate exceptions when parsing locale file. Similar to previous implementation * Add //no-op to try/catch * Apply suggestions to fix issues that might arise with the Norwegian locale * Properly resolve override locale path for nb_no * Yeet temporary fix - addresses @Camotoy's review * Catch IOException properly --------- Co-authored-by: onebeastchris --- .../geysermc/geyser/text/MinecraftLocale.java | 118 +++++++++++------- 1 file changed, 72 insertions(+), 46 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java index fa1b322a5..f6e37787d 100644 --- a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java @@ -35,6 +35,7 @@ import org.geysermc.geyser.util.WebUtils; import java.io.*; import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.StandardOpenOption; import java.util.HashMap; import java.util.Iterator; import java.util.Locale; @@ -44,16 +45,15 @@ public class MinecraftLocale { public static final Map> LOCALE_MAPPINGS = new HashMap<>(); - static { - // Create the locales folder - File localesFolder = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("locales").toFile(); - //noinspection ResultOfMethodCallIgnored - localesFolder.mkdir(); + private static final Path LOCALE_FOLDER = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("locales"); - // FIXME TEMPORARY + static { try { - Files.delete(localesFolder.toPath().resolve("en_us.hash")); - } catch (IOException ignored) { + // Create the locales folder + Files.createDirectories(LOCALE_FOLDER); + Files.createDirectories(LOCALE_FOLDER.resolve("overrides")); + } catch (IOException exception) { + throw new RuntimeException("Unable to create locale folders! " + exception.getMessage()); } } @@ -69,12 +69,18 @@ public class MinecraftLocale { } /** - * Downloads a locale from Mojang if its not already loaded + * Downloads a locale from Mojang if it's not already loaded * * @param locale Locale to download and load */ public static void downloadAndLoadLocale(String locale) { locale = locale.toLowerCase(Locale.ROOT); + + if (isLocaleLoaded(locale)) { + GeyserImpl.getInstance().getLogger().debug("Locale already loaded: " + locale); + return; + } + if (locale.equals("nb_no")) { // Different locale code - https://minecraft.wiki/w/Language locale = "no_no"; @@ -99,7 +105,7 @@ public class MinecraftLocale { } /** - * Downloads the specified locale if its not already downloaded + * Downloads the specified locale if it's not already downloaded * * @param locale Locale to download */ @@ -132,34 +138,56 @@ public class MinecraftLocale { } private static Path getPath(String locale) { - return GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("locales/" + locale + ".json"); + return LOCALE_FOLDER.resolve(locale + ".json"); } /** * Loads a locale already downloaded, if the file doesn't exist it just logs a warning * - * @param locale Locale to load + * @param locale Bedrock locale to load */ private static boolean loadLocale(String locale) { - File localeFile = GeyserImpl.getInstance().getBootstrap().getConfigFolder().resolve("locales/" + locale + ".json").toFile(); + String lowercaseLocale = locale.toLowerCase(Locale.ROOT); - // Load the locale - if (localeFile.exists()) { - // Read the localefile - InputStream localeStream; - try { - localeStream = new FileInputStream(localeFile); - } catch (FileNotFoundException e) { - throw new AssertionError(GeyserLocale.getLocaleStringLog("geyser.locale.fail.file", locale, e.getMessage())); - } + // Need to grab this before we change the locale - downloaded/override locales are stored under the Java locale name + Path localeFile = getPath(lowercaseLocale); + Path localeOverride = getPath("overrides/" + lowercaseLocale); + if (lowercaseLocale.equals("no_no")) { + // Store this locale under the Bedrock locale, so we don't need to do this check over and over + lowercaseLocale = "nb_no"; + } + + Map langMap = new HashMap<>(); + if (Files.exists(localeFile) && Files.isReadable(localeFile)) { + langMap.putAll(parseLangFile(localeFile, lowercaseLocale)); + } + + // Load the locale overwrites + if (Files.exists(localeOverride) && Files.isReadable(localeOverride)) { + langMap.putAll(parseLangFile(localeOverride, lowercaseLocale)); + } + + if (!langMap.isEmpty()) { + LOCALE_MAPPINGS.put(lowercaseLocale, langMap); + return true; + } else { + return false; + } + } + + /** + * Load and parse a json lang file. + * + * @param localeFile Path of locale file + * @param locale Locale to load + * @return a Map of the loaded translations + */ + public static Map parseLangFile(Path localeFile, String locale) { + // Read the localefile + try (InputStream localeStream = Files.newInputStream(localeFile, StandardOpenOption.READ)) { // Parse the file as json - JsonNode localeObj; - try { - localeObj = GeyserImpl.JSON_MAPPER.readTree(localeStream); - } catch (Exception e) { - throw new AssertionError(GeyserLocale.getLocaleStringLog("geyser.locale.fail.json", locale), e); - } + JsonNode localeObj = GeyserImpl.JSON_MAPPER.readTree(localeStream); // Parse all the locale fields Iterator> localeIterator = localeObj.fields(); @@ -168,24 +196,12 @@ public class MinecraftLocale { Map.Entry entry = localeIterator.next(); langMap.put(entry.getKey(), entry.getValue().asText()); } - - String bedrockLocale = locale.toLowerCase(Locale.ROOT); - if (bedrockLocale.equals("no_no")) { - // Store this locale under the Bedrock locale so we don't need to do this check over and over - bedrockLocale = "nb_no"; - } - - // Insert the locale into the mappings - LOCALE_MAPPINGS.put(bedrockLocale, langMap); - - try { - localeStream.close(); - } catch (IOException e) { - throw new AssertionError(GeyserLocale.getLocaleStringLog("geyser.locale.fail.file", locale, e.getMessage())); - } - return true; - } else { - return false; + localeStream.close(); + return langMap; + } catch (FileNotFoundException e){ + throw new AssertionError(GeyserLocale.getLocaleStringLog("geyser.locale.fail.file", locale, e.getMessage())); + } catch (Exception e) { + throw new AssertionError(GeyserLocale.getLocaleStringLog("geyser.locale.fail.json", locale), e); } } @@ -226,6 +242,16 @@ public class MinecraftLocale { return null; } + /** + * Checks if a locale has been loaded. + * + * @param locale Locale to check + * @return true if the locale has been loaded + */ + public static boolean isLocaleLoaded(String locale) { + return LOCALE_MAPPINGS.containsKey(locale.toLowerCase(Locale.ROOT)); + } + /** * Convert a byte array into a hex string * From 3d05181a1390ff43d66ed8e8b79792bf883df859 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 12 Dec 2023 22:44:13 +0100 Subject: [PATCH 41/86] Fix: Show the correct port that Geyser started on when using Geyser-Fabric on a client. (#4335) --- .../platform/fabric/mixin/client/IntegratedServerMixin.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java index f11d3a1ae..af11174dc 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java @@ -32,6 +32,7 @@ import net.minecraft.client.server.IntegratedServer; import net.minecraft.network.chat.Component; import net.minecraft.server.MinecraftServer; import net.minecraft.world.level.GameType; +import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.platform.fabric.GeyserFabricMod; import org.geysermc.geyser.platform.fabric.GeyserServerPortGetter; import org.geysermc.geyser.text.GeyserLocale; @@ -62,7 +63,7 @@ public class IntegratedServerMixin implements GeyserServerPortGetter { // Give indication that Geyser is loaded Objects.requireNonNull(this.minecraft.player); this.minecraft.player.displayClientMessage(Component.literal(GeyserLocale.getPlayerLocaleString("geyser.core.start", - this.minecraft.options.languageCode, "localhost", String.valueOf(this.publishedPort))), false); + this.minecraft.options.languageCode, "localhost", String.valueOf(GeyserImpl.getInstance().bedrockListener().port()))), false); } } From f33703929eb8c324551fe0a871d2db2491ab3f58 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Mon, 20 Nov 2023 23:24:16 -0500 Subject: [PATCH 42/86] 1.20.3: update Items class --- .../java/org/geysermc/geyser/item/Items.java | 61 ++++++++++++++++++- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/item/Items.java b/core/src/main/java/org/geysermc/geyser/item/Items.java index 303665c79..92c446f68 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -51,6 +51,19 @@ public final class Items { public static final Item POLISHED_DEEPSLATE = register(new BlockItem("polished_deepslate", builder())); public static final Item CALCITE = register(new BlockItem("calcite", builder())); public static final Item TUFF = register(new BlockItem("tuff", builder())); + public static final Item TUFF_SLAB = register(new BlockItem("tuff_slab", builder())); + public static final Item TUFF_STAIRS = register(new BlockItem("tuff_stairs", builder())); + public static final Item TUFF_WALL = register(new BlockItem("tuff_wall", builder())); + public static final Item CHISELED_TUFF = register(new BlockItem("chiseled_tuff", builder())); + public static final Item POLISHED_TUFF = register(new BlockItem("polished_tuff", builder())); + public static final Item POLISHED_TUFF_SLAB = register(new BlockItem("polished_tuff_slab", builder())); + public static final Item POLISHED_TUFF_STAIRS = register(new BlockItem("polished_tuff_stairs", builder())); + public static final Item POLISHED_TUFF_WALL = register(new BlockItem("polished_tuff_wall", builder())); + public static final Item TUFF_BRICKS = register(new BlockItem("tuff_bricks", builder())); + public static final Item TUFF_BRICK_SLAB = register(new BlockItem("tuff_brick_slab", builder())); + public static final Item TUFF_BRICK_STAIRS = register(new BlockItem("tuff_brick_stairs", builder())); + public static final Item TUFF_BRICK_WALL = register(new BlockItem("tuff_brick_wall", builder())); + public static final Item CHISELED_TUFF_BRICKS = register(new BlockItem("chiseled_tuff_bricks", builder())); public static final Item DRIPSTONE_BLOCK = register(new BlockItem("dripstone_block", builder())); public static final Item GRASS_BLOCK = register(new BlockItem("grass_block", builder())); public static final Item DIRT = register(new BlockItem("dirt", builder())); @@ -120,6 +133,10 @@ public final class Items { public static final Item EXPOSED_COPPER = register(new BlockItem("exposed_copper", builder())); public static final Item WEATHERED_COPPER = register(new BlockItem("weathered_copper", builder())); public static final Item OXIDIZED_COPPER = register(new BlockItem("oxidized_copper", builder())); + public static final Item CHISELED_COPPER = register(new BlockItem("chiseled_copper", builder())); + public static final Item EXPOSED_CHISELED_COPPER = register(new BlockItem("exposed_chiseled_copper", builder())); + public static final Item WEATHERED_CHISELED_COPPER = register(new BlockItem("weathered_chiseled_copper", builder())); + public static final Item OXIDIZED_CHISELED_COPPER = register(new BlockItem("oxidized_chiseled_copper", builder())); public static final Item CUT_COPPER = register(new BlockItem("cut_copper", builder())); public static final Item EXPOSED_CUT_COPPER = register(new BlockItem("exposed_cut_copper", builder())); public static final Item WEATHERED_CUT_COPPER = register(new BlockItem("weathered_cut_copper", builder())); @@ -136,6 +153,10 @@ public final class Items { public static final Item WAXED_EXPOSED_COPPER = register(new BlockItem("waxed_exposed_copper", builder())); public static final Item WAXED_WEATHERED_COPPER = register(new BlockItem("waxed_weathered_copper", builder())); public static final Item WAXED_OXIDIZED_COPPER = register(new BlockItem("waxed_oxidized_copper", builder())); + public static final Item WAXED_CHISELED_COPPER = register(new BlockItem("waxed_chiseled_copper", builder())); + public static final Item WAXED_EXPOSED_CHISELED_COPPER = register(new BlockItem("waxed_exposed_chiseled_copper", builder())); + public static final Item WAXED_WEATHERED_CHISELED_COPPER = register(new BlockItem("waxed_weathered_chiseled_copper", builder())); + public static final Item WAXED_OXIDIZED_CHISELED_COPPER = register(new BlockItem("waxed_oxidized_chiseled_copper", builder())); public static final Item WAXED_CUT_COPPER = register(new BlockItem("waxed_cut_copper", builder())); public static final Item WAXED_EXPOSED_CUT_COPPER = register(new BlockItem("waxed_exposed_cut_copper", builder())); public static final Item WAXED_WEATHERED_CUT_COPPER = register(new BlockItem("waxed_weathered_cut_copper", builder())); @@ -211,7 +232,7 @@ public final class Items { public static final Item CHISELED_SANDSTONE = register(new BlockItem("chiseled_sandstone", builder())); public static final Item CUT_SANDSTONE = register(new BlockItem("cut_sandstone", builder())); public static final Item COBWEB = register(new BlockItem("cobweb", builder())); - public static final Item GRASS = register(new BlockItem("grass", builder())); + public static final Item SHORT_GRASS = register(new BlockItem("short_grass", builder())); public static final Item FERN = register(new BlockItem("fern", builder())); public static final Item AZALEA = register(new BlockItem("azalea", builder())); public static final Item FLOWERING_AZALEA = register(new BlockItem("flowering_azalea", builder())); @@ -304,7 +325,7 @@ public final class Items { public static final Item BRICKS = register(new BlockItem("bricks", builder())); public static final Item BOOKSHELF = register(new BlockItem("bookshelf", builder())); public static final Item CHISELED_BOOKSHELF = register(new BlockItem("chiseled_bookshelf", builder())); - public static final Item DECORATED_POT = register(new DecoratedPotItem("decorated_pot", builder().stackSize(1))); + public static final Item DECORATED_POT = register(new DecoratedPotItem("decorated_pot", builder())); public static final Item MOSSY_COBBLESTONE = register(new BlockItem("mossy_cobblestone", builder())); public static final Item OBSIDIAN = register(new BlockItem("obsidian", builder())); public static final Item TORCH = register(new BlockItem("torch", builder())); @@ -738,6 +759,14 @@ public final class Items { public static final Item BAMBOO_DOOR = register(new BlockItem("bamboo_door", builder())); public static final Item CRIMSON_DOOR = register(new BlockItem("crimson_door", builder())); public static final Item WARPED_DOOR = register(new BlockItem("warped_door", builder())); + public static final Item COPPER_DOOR = register(new BlockItem("copper_door", builder())); + public static final Item EXPOSED_COPPER_DOOR = register(new BlockItem("exposed_copper_door", builder())); + public static final Item WEATHERED_COPPER_DOOR = register(new BlockItem("weathered_copper_door", builder())); + public static final Item OXIDIZED_COPPER_DOOR = register(new BlockItem("oxidized_copper_door", builder())); + public static final Item WAXED_COPPER_DOOR = register(new BlockItem("waxed_copper_door", builder())); + public static final Item WAXED_EXPOSED_COPPER_DOOR = register(new BlockItem("waxed_exposed_copper_door", builder())); + public static final Item WAXED_WEATHERED_COPPER_DOOR = register(new BlockItem("waxed_weathered_copper_door", builder())); + public static final Item WAXED_OXIDIZED_COPPER_DOOR = register(new BlockItem("waxed_oxidized_copper_door", builder())); public static final Item IRON_TRAPDOOR = register(new BlockItem("iron_trapdoor", builder())); public static final Item OAK_TRAPDOOR = register(new BlockItem("oak_trapdoor", builder())); public static final Item SPRUCE_TRAPDOOR = register(new BlockItem("spruce_trapdoor", builder())); @@ -750,6 +779,14 @@ public final class Items { public static final Item BAMBOO_TRAPDOOR = register(new BlockItem("bamboo_trapdoor", builder())); public static final Item CRIMSON_TRAPDOOR = register(new BlockItem("crimson_trapdoor", builder())); public static final Item WARPED_TRAPDOOR = register(new BlockItem("warped_trapdoor", builder())); + public static final Item COPPER_TRAPDOOR = register(new BlockItem("copper_trapdoor", builder())); + public static final Item EXPOSED_COPPER_TRAPDOOR = register(new BlockItem("exposed_copper_trapdoor", builder())); + public static final Item WEATHERED_COPPER_TRAPDOOR = register(new BlockItem("weathered_copper_trapdoor", builder())); + public static final Item OXIDIZED_COPPER_TRAPDOOR = register(new BlockItem("oxidized_copper_trapdoor", builder())); + public static final Item WAXED_COPPER_TRAPDOOR = register(new BlockItem("waxed_copper_trapdoor", builder())); + public static final Item WAXED_EXPOSED_COPPER_TRAPDOOR = register(new BlockItem("waxed_exposed_copper_trapdoor", builder())); + public static final Item WAXED_WEATHERED_COPPER_TRAPDOOR = register(new BlockItem("waxed_weathered_copper_trapdoor", builder())); + public static final Item WAXED_OXIDIZED_COPPER_TRAPDOOR = register(new BlockItem("waxed_oxidized_copper_trapdoor", builder())); public static final Item OAK_FENCE_GATE = register(new BlockItem("oak_fence_gate", builder())); public static final Item SPRUCE_FENCE_GATE = register(new BlockItem("spruce_fence_gate", builder())); public static final Item BIRCH_FENCE_GATE = register(new BlockItem("birch_fence_gate", builder())); @@ -979,6 +1016,7 @@ public final class Items { public static final Item RED_BED = register(new BlockItem("red_bed", builder().stackSize(1))); public static final Item BLACK_BED = register(new BlockItem("black_bed", builder().stackSize(1))); public static final Item COOKIE = register(new Item("cookie", builder())); + public static final Item CRAFTER = register(new BlockItem("crafter", builder())); public static final Item FILLED_MAP = register(new FilledMapItem("filled_map", builder())); public static final Item SHEARS = register(new Item("shears", builder().stackSize(1).maxDamage(238))); public static final Item MELON_SLICE = register(new Item("melon_slice", builder())); @@ -1010,6 +1048,7 @@ public final class Items { public static final Item BAT_SPAWN_EGG = register(new SpawnEggItem("bat_spawn_egg", builder())); public static final Item BEE_SPAWN_EGG = register(new SpawnEggItem("bee_spawn_egg", builder())); public static final Item BLAZE_SPAWN_EGG = register(new SpawnEggItem("blaze_spawn_egg", builder())); + public static final Item BREEZE_SPAWN_EGG = register(new SpawnEggItem("breeze_spawn_egg", builder())); public static final Item CAT_SPAWN_EGG = register(new SpawnEggItem("cat_spawn_egg", builder())); public static final Item CAMEL_SPAWN_EGG = register(new SpawnEggItem("camel_spawn_egg", builder())); public static final Item CAVE_SPIDER_SPAWN_EGG = register(new SpawnEggItem("cave_spider_spawn_egg", builder())); @@ -1293,6 +1332,24 @@ public final class Items { public static final Item SHELTER_POTTERY_SHERD = register(new Item("shelter_pottery_sherd", builder())); public static final Item SKULL_POTTERY_SHERD = register(new Item("skull_pottery_sherd", builder())); public static final Item SNORT_POTTERY_SHERD = register(new Item("snort_pottery_sherd", builder())); + public static final Item COPPER_GRATE = register(new BlockItem("copper_grate", builder())); + public static final Item EXPOSED_COPPER_GRATE = register(new BlockItem("exposed_copper_grate", builder())); + public static final Item WEATHERED_COPPER_GRATE = register(new BlockItem("weathered_copper_grate", builder())); + public static final Item OXIDIZED_COPPER_GRATE = register(new BlockItem("oxidized_copper_grate", builder())); + public static final Item WAXED_COPPER_GRATE = register(new BlockItem("waxed_copper_grate", builder())); + public static final Item WAXED_EXPOSED_COPPER_GRATE = register(new BlockItem("waxed_exposed_copper_grate", builder())); + public static final Item WAXED_WEATHERED_COPPER_GRATE = register(new BlockItem("waxed_weathered_copper_grate", builder())); + public static final Item WAXED_OXIDIZED_COPPER_GRATE = register(new BlockItem("waxed_oxidized_copper_grate", builder())); + public static final Item COPPER_BULB = register(new BlockItem("copper_bulb", builder())); + public static final Item EXPOSED_COPPER_BULB = register(new BlockItem("exposed_copper_bulb", builder())); + public static final Item WEATHERED_COPPER_BULB = register(new BlockItem("weathered_copper_bulb", builder())); + public static final Item OXIDIZED_COPPER_BULB = register(new BlockItem("oxidized_copper_bulb", builder())); + public static final Item WAXED_COPPER_BULB = register(new BlockItem("waxed_copper_bulb", builder())); + public static final Item WAXED_EXPOSED_COPPER_BULB = register(new BlockItem("waxed_exposed_copper_bulb", builder())); + public static final Item WAXED_WEATHERED_COPPER_BULB = register(new BlockItem("waxed_weathered_copper_bulb", builder())); + public static final Item WAXED_OXIDIZED_COPPER_BULB = register(new BlockItem("waxed_oxidized_copper_bulb", builder())); + public static final Item TRIAL_SPAWNER = register(new BlockItem("trial_spawner", builder())); + public static final Item TRIAL_KEY = register(new Item("trial_key", builder())); private static T register(T item) { return register(item, Registries.JAVA_ITEMS.get().size()); From 184a14d026f9ce75a8776d4da0787011f76f70ae Mon Sep 17 00:00:00 2001 From: Hasan <52300558+hasankayra04@users.noreply.github.com> Date: Tue, 21 Nov 2023 09:10:11 +0300 Subject: [PATCH 43/86] Update versions in README and modrinth task (#4303) * Change fabric version * Update java version * Update Bedrock version also --- README.md | 2 +- bootstrap/fabric/build.gradle.kts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b878db64d..b3471b4d7 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! -### Currently supporting Minecraft Bedrock 1.20.0 - 1.20.50 and Minecraft Java 1.20.2 +### Currently supporting Minecraft Bedrock 1.20.0 - 1.20.50 and Minecraft Java 1.20.3 ## Setting Up Take a look [here](https://wiki.geysermc.org/geyser/setup/) for how to set up Geyser. diff --git a/bootstrap/fabric/build.gradle.kts b/bootstrap/fabric/build.gradle.kts index 07de70f60..83d6a48d0 100644 --- a/bootstrap/fabric/build.gradle.kts +++ b/bootstrap/fabric/build.gradle.kts @@ -119,7 +119,7 @@ modrinth { syncBodyFrom.set(rootProject.file("README.md").readText()) uploadFile.set(tasks.getByPath("remapModrinthJar")) - gameVersions.addAll("1.20.2") + gameVersions.addAll("1.20.3") loaders.add("fabric") failSilently.set(true) From a89aa4e0645153a8c85b9e1fa47fe171bf0e20be Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Sat, 25 Nov 2023 07:09:02 -0500 Subject: [PATCH 44/86] 1.20.3: compiling protocol changes --- .../geyser/level/GeyserAdvancement.java | 8 +- .../session/cache/AdvancementsCache.java | 2 +- .../DecoratedPotBlockEntityTranslator.java | 1 + .../BedrockBlockEntityDataTranslator.java | 3 +- ...avaClientboundResourcePackPushPacket.java} | 12 +-- .../JavaUpdateAdvancementsTranslator.java | 2 +- .../entity/spawn/JavaAddEntityTranslator.java | 10 +++ .../java/level/JavaBlockEventTranslator.java | 31 +++++--- .../java/level/JavaExplodeTranslator.java | 1 + .../java/level/JavaGameEventTranslator.java | 3 + .../java/level/JavaLevelEventTranslator.java | 10 ++- .../java/scoreboard/JavaResetScorePacket.java | 77 +++++++++++++++++++ .../JavaSetObjectiveTranslator.java | 1 + .../scoreboard/JavaSetScoreTranslator.java | 46 +++-------- gradle/libs.versions.toml | 4 +- 15 files changed, 147 insertions(+), 64 deletions(-) rename core/src/main/java/org/geysermc/geyser/translator/protocol/java/{JavaClientboundResourcePacksPacket.java => JavaClientboundResourcePackPushPacket.java} (85%) create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaResetScorePacket.java diff --git a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java index e09cad19c..f51e7b2ab 100644 --- a/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java +++ b/core/src/main/java/org/geysermc/geyser/level/GeyserAdvancement.java @@ -26,6 +26,8 @@ package org.geysermc.geyser.level; import com.github.steveice10.mc.protocol.data.game.advancement.Advancement; +import com.github.steveice10.mc.protocol.data.game.advancement.Advancement.DisplayData; +import com.github.steveice10.mc.protocol.data.game.advancement.Advancement.DisplayData.AdvancementType; import org.checkerframework.checker.nullness.qual.NonNull; import org.geysermc.geyser.session.cache.AdvancementsCache; import org.geysermc.geyser.text.ChatColor; @@ -61,7 +63,7 @@ public class GeyserAdvancement { return this.advancement.getParentId(); } - public Advancement.DisplayData getDisplayData() { + public DisplayData getDisplayData() { return this.advancement.getDisplayData(); } @@ -69,8 +71,8 @@ public class GeyserAdvancement { * @return Purple for challenges and green for normal advancements */ public String getDisplayColor() { - Advancement.DisplayData displayData = getDisplayData(); - return displayData != null && displayData.getFrameType() == Advancement.DisplayData.FrameType.CHALLENGE ? ChatColor.LIGHT_PURPLE : ChatColor.GREEN; + DisplayData displayData = getDisplayData(); + return displayData != null && displayData.getAdvancementType() == AdvancementType.CHALLENGE ? ChatColor.LIGHT_PURPLE : ChatColor.GREEN; } public @NonNull String getRootId(AdvancementsCache advancementsCache) { diff --git a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java index 3562f0d4d..3bc661c16 100644 --- a/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java +++ b/core/src/main/java/org/geysermc/geyser/session/cache/AdvancementsCache.java @@ -231,7 +231,7 @@ public class AdvancementsCache { } public String getColorFromAdvancementFrameType(GeyserAdvancement advancement) { - if (advancement.getDisplayData().getFrameType() == Advancement.DisplayData.FrameType.CHALLENGE) { + if (advancement.getDisplayData().getAdvancementType() == Advancement.DisplayData.AdvancementType.CHALLENGE) { return ChatColor.DARK_PURPLE; } return ChatColor.GREEN; // Used for types TASK and GOAL diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DecoratedPotBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DecoratedPotBlockEntityTranslator.java index 1774d9c76..9ff864101 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DecoratedPotBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DecoratedPotBlockEntityTranslator.java @@ -44,6 +44,7 @@ public class DecoratedPotBlockEntityTranslator extends BlockEntityTranslator { if (tag == null) { return; } + // todo 1.20.3 maybe // exact same format if (tag.get("sherds") instanceof ListTag sherds) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java index bab5e59a5..239bf9616 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockEntityDataTranslator.java @@ -118,8 +118,9 @@ public class BedrockBlockEntityDataTranslator extends PacketTranslator { +@Translator(packet = ClientboundResourcePackPushPacket.class) +public class JavaClientboundResourcePackPushPacket extends PacketTranslator { @Override - public void translate(GeyserSession session, ClientboundResourcePackPacket packet) { + public void translate(GeyserSession session, ClientboundResourcePackPushPacket packet) { // We need to "answer" this to avoid timeout issues related to resource packs // If packs are required, we need to lie to the server that we accepted them, as we get kicked otherwise. if (packet.isRequired()) { - session.sendDownstreamPacket(new ServerboundResourcePackPacket(ResourcePackStatus.SUCCESSFULLY_LOADED)); + session.sendDownstreamPacket(new ServerboundResourcePackPacket(packet.getId(), ResourcePackStatus.SUCCESSFULLY_LOADED)); } else { - session.sendDownstreamPacket(new ServerboundResourcePackPacket(ResourcePackStatus.DECLINED)); + session.sendDownstreamPacket(new ServerboundResourcePackPacket(packet.getId(), ResourcePackStatus.DECLINED)); } } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java index e98e5c1ec..a7efdbefa 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateAdvancementsTranslator.java @@ -81,7 +81,7 @@ public class JavaUpdateAdvancementsTranslator extends PacketTranslator 0 ? 1 : 0); + blockEventPacket.setEventData(chestValue.getViewers() > 0 ? 1 : 0); session.sendUpstreamPacket(blockEventPacket); - } else if (packet.getValue() instanceof EndGatewayValue) { + } else if (value instanceof EndGatewayValue) { blockEventPacket.setEventType(1); session.sendUpstreamPacket(blockEventPacket); - } else if (packet.getValue() instanceof NoteBlockValue) { + } else if (value instanceof NoteBlockValue) { session.getGeyser().getWorldManager().getBlockAtAsync(session, position).thenAccept(blockState -> { blockEventPacket.setEventData(BlockStateValues.getNoteblockPitch(blockState)); session.sendUpstreamPacket(blockEventPacket); }); - } else if (packet.getValue() instanceof PistonValue pistonValue) { + } else if (value instanceof PistonValue pistonValue) { PistonValueType action = (PistonValueType) packet.getType(); Direction direction = Direction.fromPistonValue(pistonValue.getDirection()); PistonCache pistonCache = session.getPistonCache(); @@ -98,13 +102,10 @@ public class JavaBlockEventTranslator extends PacketTranslator { - effectPacket.setType(org.cloudburstmc.protocol.bedrock.data.LevelEvent.PARTICLE_SHOOT); + case SMOKE, WHITE_SMOKE -> { + if (levelEvent == LevelEventType.SMOKE) { + effectPacket.setType(org.cloudburstmc.protocol.bedrock.data.LevelEvent.PARTICLE_SHOOT); + } else { + effectPacket.setType(org.cloudburstmc.protocol.bedrock.data.LevelEvent.PARTICLE_SHOOT_WHITE_SMOKE); + } SmokeEventData smokeEventData = (SmokeEventData) packet.getData(); int data = 0; @@ -332,7 +336,7 @@ public class JavaLevelEventTranslator extends PacketTranslator { - GeyserImpl.getInstance().getLogger().debug("Unhandled level event: " + packet.getEvent()); + GeyserImpl.getInstance().getLogger().warning("Unhandled level event: " + packet.getEvent()); return; } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaResetScorePacket.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaResetScorePacket.java new file mode 100644 index 000000000..418037760 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaResetScorePacket.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.protocol.java.scoreboard; + +import com.github.steveice10.mc.protocol.data.game.scoreboard.ScoreboardPosition; +import com.github.steveice10.mc.protocol.packet.ingame.clientbound.scoreboard.ClientboundResetScorePacket; +import org.geysermc.geyser.scoreboard.Objective; +import org.geysermc.geyser.scoreboard.Scoreboard; +import org.geysermc.geyser.scoreboard.ScoreboardUpdater; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.session.cache.WorldCache; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; + +@Translator(packet = ClientboundResetScorePacket.class) +public class JavaResetScorePacket extends PacketTranslator { + + @Override + public void translate(GeyserSession session, ClientboundResetScorePacket packet) { + WorldCache worldCache = session.getWorldCache(); + Scoreboard scoreboard = worldCache.getScoreboard(); + int pps = worldCache.increaseAndGetScoreboardPacketsPerSecond(); + + Objective belowName = scoreboard.getObjectiveSlots().get(ScoreboardPosition.BELOW_NAME); + + if (packet.getObjective() == null) { + // No objective name means all scores are reset for that player (/scoreboard players reset PLAYERNAME) + for (Objective otherObjective : scoreboard.getObjectives()) { + otherObjective.removeScore(packet.getOwner()); + } + + // as described below + if (belowName != null) { + JavaSetScoreTranslator.setBelowName(session, belowName, packet.getOwner(), 0); + } + } else { + Objective objective = scoreboard.getObjective(packet.getObjective()); + objective.removeScore(packet.getOwner()); + + // If this is the objective that is in use to show the below name text, we need to update the player + // attached to this score. + if (objective == belowName) { + // Update the score on this player to now reflect 0 + JavaSetScoreTranslator.setBelowName(session, objective, packet.getOwner(), 0); + } + } + + // ScoreboardUpdater will handle it for us if the packets per second + // (for score and team packets) is higher than the first threshold + if (pps < ScoreboardUpdater.FIRST_SCORE_PACKETS_PER_SECOND_THRESHOLD) { + scoreboard.onUpdate(); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java index 3b009a2a5..cef94c98e 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetObjectiveTranslator.java @@ -47,6 +47,7 @@ public class JavaSetObjectiveTranslator extends PacketTranslator { - objective.setScore(packet.getEntry(), packet.getValue()); - if (isBelowName) { - // Update the below name score on this player - setBelowName(session, objective, packet.getEntry(), packet.getValue()); - } - } - case REMOVE -> { - if (packet.getObjective().isEmpty()) { - // An empty objective name means all scores are reset for that player (/scoreboard players reset PLAYERNAME) - Objective belowName = scoreboard.getObjectiveSlots().get(ScoreboardPosition.BELOW_NAME); - if (belowName != null) { - setBelowName(session, belowName, packet.getEntry(), 0); - } - } - - if (objective != null) { - objective.removeScore(packet.getEntry()); - - if (isBelowName) { - // Update the score on this player to now reflect 0 - setBelowName(session, objective, packet.getEntry(), 0); - } - } else { - for (Objective objective1 : scoreboard.getObjectives()) { - objective1.removeScore(packet.getEntry()); - } - } - } + objective.setScore(packet.getOwner(), packet.getValue()); + if (isBelowName) { + // Update the below name score on this player + setBelowName(session, objective, packet.getOwner(), packet.getValue()); } // ScoreboardUpdater will handle it for us if the packets per second @@ -112,8 +86,8 @@ public class JavaSetScoreTranslator extends PacketTranslator Date: Mon, 27 Nov 2023 07:37:29 -0500 Subject: [PATCH 45/86] Drop <1.20.50 --- .../geysermc/geyser/network/GameProtocol.java | 28 +- .../populator/BlockRegistryPopulator.java | 12 +- .../populator/ItemRegistryPopulator.java | 36 +- .../geyser/session/GeyserSession.java | 11 +- .../JavaClientboundRecipesTranslator.java | 5 - .../bedrock/block_palette.1_20_0.nbt | Bin 151635 -> 0 bytes .../bedrock/block_palette.1_20_10.nbt | Bin 108793 -> 0 bytes .../bedrock/block_palette.1_20_30.nbt | Bin 158190 -> 0 bytes .../bedrock/runtime_item_states.1_20_0.json | 5186 --------------- .../bedrock/runtime_item_states.1_20_10.json | 5314 ---------------- .../bedrock/runtime_item_states.1_20_30.json | 5570 ----------------- 11 files changed, 10 insertions(+), 16152 deletions(-) delete mode 100644 core/src/main/resources/bedrock/block_palette.1_20_0.nbt delete mode 100644 core/src/main/resources/bedrock/block_palette.1_20_10.nbt delete mode 100644 core/src/main/resources/bedrock/block_palette.1_20_30.nbt delete mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_20_0.json delete mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_20_10.json delete mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_20_30.json diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index 11c7bc11e..923779095 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -29,13 +29,8 @@ import com.github.steveice10.mc.protocol.codec.MinecraftCodec; import com.github.steveice10.mc.protocol.codec.PacketCodec; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; -import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; -import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; -import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618; -import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; -import org.geysermc.geyser.session.GeyserSession; import java.util.ArrayList; import java.util.List; @@ -63,18 +58,11 @@ public final class GameProtocol { private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC; static { - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v589.CODEC.toBuilder() - .minecraftVersion("1.20.0/1.20.1") - .build()); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v594.CODEC.toBuilder() - .minecraftVersion("1.20.10/1.20.15") - .build()); - SUPPORTED_BEDROCK_CODECS.add(Bedrock_v618.CODEC.toBuilder() - .minecraftVersion("1.20.30/1.20.32") - .build()); + /* SUPPORTED_BEDROCK_CODECS.add(Bedrock_v622.CODEC.toBuilder() .minecraftVersion("1.20.40/1.20.41") .build()); + */ SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); } @@ -94,18 +82,6 @@ public final class GameProtocol { /* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */ - public static boolean isPre1_20_10(GeyserSession session) { - return session.getUpstream().getProtocolVersion() < Bedrock_v594.CODEC.getProtocolVersion(); - } - - /** - * @param session the session to check - * @return true if the session needs an experiment for recipe unlocking - */ - public static boolean isUsingExperimentalRecipeUnlocking(GeyserSession session) { - return session.getUpstream().getProtocolVersion() == Bedrock_v594.CODEC.getProtocolVersion(); - } - /** * Gets the {@link PacketCodec} for Minecraft: Java Edition. * diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 328f61500..f185119ca 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -122,17 +122,9 @@ public final class BlockRegistryPopulator { } private static void registerBedrockBlocks() { - Remapper mapper594 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE); - Remapper mapper618 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE, BlockStateUpdater_1_20_30.INSTANCE); - Remapper mapper622 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE, BlockStateUpdater_1_20_30.INSTANCE, BlockStateUpdater_1_20_40.INSTANCE); - Remapper mapper630 = Remapper.of(BlockStateUpdater_1_20_10.INSTANCE, BlockStateUpdater_1_20_30.INSTANCE, BlockStateUpdater_1_20_40.INSTANCE, BlockStateUpdater_1_20_50.INSTANCE); - var blockMappers = ImmutableMap., Remapper>builder() - .put(ObjectIntPair.of("1_20_0", Bedrock_v589.CODEC.getProtocolVersion()), tag -> tag) - .put(ObjectIntPair.of("1_20_10", Bedrock_v594.CODEC.getProtocolVersion()), mapper594) - .put(ObjectIntPair.of("1_20_30", Bedrock_v618.CODEC.getProtocolVersion()), mapper618) - .put(ObjectIntPair.of("1_20_40", Bedrock_v622.CODEC.getProtocolVersion()), mapper622) - .put(ObjectIntPair.of("1_20_50", Bedrock_v630.CODEC.getProtocolVersion()), mapper630) + //.put(ObjectIntPair.of("1_20_40", Bedrock_v622.CODEC.getProtocolVersion()), mapper622) + .put(ObjectIntPair.of("1_20_50", Bedrock_v630.CODEC.getProtocolVersion()), tag -> tag) .build(); // We can keep this strong as nothing should be garbage collected diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index f46a49c3a..5aa24de1f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -89,34 +89,8 @@ public class ItemRegistryPopulator { } public static void populate() { - // Forward-map 1.20 mappings to 1.20.10 - Remapper remapper594 = (item, mapping) -> { - // 1.20.10+ received parity for concrete and shulker boxes - String id = item.javaIdentifier(); - if (id.endsWith("_concrete") || id.endsWith("_shulker_box")) { - // the first underscore in "_shulker_box" accounts for ignoring "minecraft:shulker_box" - // which is mapped to "minecraft:undyed_shulker_box" - return mapping.withBedrockIdentifier(id); - } - return mapping; - }; - // 1.20 to 1.20.30 - Remapper remapper618 = (item, mapping) -> { - mapping = remapper594.remap(item, mapping); // apply 1.20.10 remapper first - - String id = item.javaIdentifier(); - if (id.endsWith("concrete_powder") || id.contains("stained_glass") || (id.endsWith("_terracotta") && !id.contains("glazed"))) { - // parity: concrete powder, stained-glass blocks and panes, and coloured terracotta - // 1. 'minecraft:terracotta' is still 'minecraft:hardened_clay' - // 2. there were no changes for glazed, but it doesn't have full parity, so ignore it. - return mapping.withBedrockIdentifier(id); - } - return mapping; - }; - + /* Remapper remapper630 = (item, mapping) -> { - mapping = remapper618.remap(item, mapping); // apply 1.20.30 remapper first - String id = item.javaIdentifier(); // 1.20.50 replaced stone & planks to individual stone types // E.g.: granite, diorite, andesite, polished variants, dark_oak_planks etc @@ -126,13 +100,11 @@ public class ItemRegistryPopulator { return mapping; }; + */ List paletteVersions = new ArrayList<>(3); - paletteVersions.add(new PaletteVersion("1_20_0", Bedrock_v589.CODEC.getProtocolVersion())); - paletteVersions.add(new PaletteVersion("1_20_10", Bedrock_v594.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper594)); - paletteVersions.add(new PaletteVersion("1_20_30", Bedrock_v618.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper618)); - paletteVersions.add(new PaletteVersion("1_20_40", Bedrock_v622.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper618)); // NO item changes between 1.20.30 and 1.20.40 - paletteVersions.add(new PaletteVersion("1_20_50", Bedrock_v630.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper630)); + //paletteVersions.add(new PaletteVersion("1_20_40", Bedrock_v622.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper618)); // NO item changes between 1.20.30 and 1.20.40 + paletteVersions.add(new PaletteVersion("1_20_50", Bedrock_v630.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 2f0d47b38..265a978ff 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -129,7 +129,6 @@ import org.geysermc.geyser.item.Items; import org.geysermc.geyser.level.JavaDimension; import org.geysermc.geyser.level.WorldManager; import org.geysermc.geyser.level.physics.CollisionManager; -import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.network.netty.LocalSession; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.BlockMappings; @@ -699,10 +698,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { gamerulePacket.getGameRules().add(new GameRuleData<>("keepinventory", true)); // Ensure client doesn't try and do anything funky; the server handles this for us gamerulePacket.getGameRules().add(new GameRuleData<>("spawnradius", 0)); - // Recipe unlocking - only needs to be added if 1. it isn't already on via an experiment, or 2. the client is on pre 1.20.10 - if (!GameProtocol.isPre1_20_10(this) && !GameProtocol.isUsingExperimentalRecipeUnlocking(this)) { - gamerulePacket.getGameRules().add(new GameRuleData<>("recipesunlock", true)); - } + // Recipe unlocking + gamerulePacket.getGameRules().add(new GameRuleData<>("recipesunlock", true)); upstream.sendPacket(gamerulePacket); } @@ -1561,10 +1558,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { startGamePacket.setRewindHistorySize(0); startGamePacket.setServerAuthoritativeBlockBreaking(false); - if (GameProtocol.isUsingExperimentalRecipeUnlocking(this)) { - startGamePacket.getExperiments().add(new ExperimentData("recipe_unlocking", true)); - } - upstream.sendPacket(startGamePacket); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java index 1ccbcfdec..fbf4c6f7b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaClientboundRecipesTranslator.java @@ -40,11 +40,6 @@ public class JavaClientboundRecipesTranslator extends PacketTranslator { diff --git a/core/src/main/resources/bedrock/block_palette.1_20_0.nbt b/core/src/main/resources/bedrock/block_palette.1_20_0.nbt deleted file mode 100644 index 3593e53e49819a4768d0f743a79958a565cc3303..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 151635 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 h73w(P|IQF`eRVO)4Td?fa@O>K{PO z6=`nmz}9&7+{Ice9|Nqh-CL4h_IAbqv=)`1ASEM%?fLFPvsqzJdO!<&p$dZ_OJYh@ zVB&;Y*6OE1)>S>0zxTd`{m9!RRX)W~$uV&yggjonP?1@K2BUD|vt^dAs11L!N4hH8JIU(dT9wh}tWnRb z+;K7X5~;$wnM7J~?7VS^Iq;z&-j9%5;EOE7H(yxPxvira>3!iUnzs8dDW5IwNN~K_ zi)9fvx-X?wTYcZPdtu21pH*?q8?Eqb|GXpst(WOR0(Q3^9&lk)4(!^>kOMs#l6$Y< zHpZ!YKP1Fe1r)%yVZXp3?uku#x>;ltsbiEIOhR$?;it_wGKXM za0oN76OCU}*_-|PJ-Wm7!7q!r%&dVX4DK}JVTZ$5JC;eCY+8~cwo*gf$bDNeP22t+ zcY7+#VcXN|-DMJgb+TC{i%xt>cHG$DlY^|1&XB@Zt)OlH`ri$irX=u7nbFk3CpnoN zPra%n2`JR{q$t+iUL$*v!=^uby*PI>pxzH5p~8v-N9p={o7E z9D8RIT3h+xN}h^aqm@ZE)4IxP{&xf2;jS$q5n*%CRU}rwgpu9t?3wl*ZQA^K6g~#u z@sX71XIb9)3be+(;LDw*RSd+?FO8IX*)>o}fUnET6b zKS&M%@27vXac5u?sJ8QAjKyUddh1Vah38*UEu3tD_nYlVB+Jz-H1C=g(@gVptSB2E zJ6m!tGXAj81ILflDty^7I-eA`IL-{qU2X-H%ll4m0&<;4@UR{T*Bq z0v{IkN4@mu>r!gcn*Zg2a zE4{!IvocxhH_7;+X%wxcO@YXMq-IZm_a9+P8`OL*wD{0}amldeC}$dXlDYmROtT6 zH22#01@!jqdna=c_OW)h~mpp;X7zlBnC_ zE5tq~7lk8J>+Nj6Z=PCyoDl1$;0ILAmX%uZw!B*1PM;oSc-Z{+w^T>PF$HI{B=%F_ zl?r({RFpVdfo3uVT3EIAZEf`|&~^!4xgKN7#@>~RQZ(}R-fhRnt?jN%6xxRvGlxVDzi%`yT{26-GqM5)Ki))7H@*iCjh$YrT=7^fpd?yT7 zhg#igW(CNNR)gbq zI365Q$p&iUmo>rC-0{?_u9k{` zJh*fB;bmM6d+#ayCqavyb8aim!9R14^tZ`E&ii=sNj&#&PJFqrOL>l{3~Utw6Hmla(hVg)4=mvtrK@~{3HnG zQyVFL#(2E8HTM8a`B#Eq`Yaw<{Z9*vP^RW!rD7*n`2oaZeKODe}*#~ z(op+Sr)$Q$=?fc6{Jp{@|D+RznMv;po(EKi;_q111R2Bf%3Q5UhgI)_cg{~r`R+7C z#-F=Cv~T=WIfxV|=WdOr7e!!j6rFDUVROOB6ToZh*2rcWRo;7pfMRKuyn+7Fied zpl-+8zB!Zr|1^Jf3C~uV0y^hU6}Yg4!x~BxI1))a#dYj!WK~-P2spA2_C)L8pGR5Q0*q5A?W<+Aa|gqy*N>TOM!?xcynDs1T`+SF&pJ2>DJ z_O7*|{PCKg(1*I2=nbVUM*70FUR1NHQ64)!$46_Zft=D@!^k&=>>i_JoRtG8Ko)hxzt>_AhY zHWxE*lknVww^{#A(jNLPO0rL$@e5ixios1nkpP=#3`UHvgzezwhRk19`8D#uyz3Hb zJR3conFF>FG5dPAD$*RaXz85hP+<#{b{6%7<8rLbbzqhbsM~9{-?xFSym9DO)@J|L zS^D#{b>KB#LFqcN!Pwy;07cxsifP68A7Exp?w~R=^=pEb&u@8lI~G@?@Jl5hG40-S z{EY_c$QCmSCiayZxm4=n@)ZO2l>)s~OIhj#MdGQUf4Ae^W&%ogY1YBBht`X4d>aJ# z!8@0A9>O$R(`qv1Q_+7R)kkCsyXQWhM4GdlmDCpvcO;r!GH&ka5?K>F2dcefl>H_) zfM&1zLZL=(4(#!re2%5OWCH_cFQSCEH=`ZS2&22_IPqa65D>f?HwPDO;%XUwsnprX z5RG&I;~qIW9bowp+}HQA=HE+#Av2xwcv&<{6ms#%5x4muAJe*FbG?oW<|@C3cTw0FCK{bCnz{-?GHhIJx(Y z)F^$m6s-mDW^3;?!0%i*vZvvbvvc!eRf0iNdhfuoYfI3?|w7&C1I3X9s z3A`ZQpm=vg!m%qK4z-D;4-^m-3cdR*ufu;fVf;2E89zsTu-&|)F z?Z)k)Xy0C=Qp&-!B_zdYsyP4d%swn<{Z=4>f4DgXgQmfKnCBe$QAVoFIXg~!aA4yD zg{qfIr}O59eNrOnSFyKv?ehxh>dAWSgLFzdgM9qV|0|ozYJZUGyAffb-clA zZDXAw6n(x};CA|1>O!3X({=h{c4bDK!g%i>9^RkXDFo_UwL$h_Poflpfgem%vabtm z?!imv^JDNEreD=8%YMbS?MJ{oTkEXM3}-!ioT~HWsy(+OeX!YB>8#8SUt73RR*zg< zX=#AI7&;T*4JK`Y`|hwa(c=ylz834xWP^oqBee!8>cz@T1EV?)r@JiIz;{D6m&w7| zKtZleRRKkzS>$!EgU*CVM^Laogqp@SMe-v-Y>CFg{V){)hr%+BF(`Vyaet7B87zEXP7xVi|5swew3)$$bS68Bu$dSRBb zt3yS!`|$8(H{-rFI*r0h3Z;tn!^18)%SztLPj%YU3qiLHSKh-j_N`MZ!kY;t9{Xo! z{F-Sy8(PDwcxPz_*N^s{`43xxPi_?}himKjYuQSkj);4&3FUEuPNJoAkoX@u<8Ar{ zpK{i8ea_4M-bITtmRZX^rg=*d-cuIkIJ?Rq(Fcb58jduN0p6c>kN{*#h-}NDW&_!Oq%R4yOU0GYT znl5Ir4z8>>x4^&azCRztsp}@kRVg*!$2l9vF__1WZmt(eoo3q1KN_rO*z`4fIPdx< zQ*)TeUuvEc^6)L;^6v@ufkUr1vy8{)anYvwx3+}z!$e~5rn^V;H`k9&>l>@Mohee} z+suoZ110XvDv{Uw8+(GD@RYZA;Wv-kRv)j(e-pIb{E0%@oqRY#W7}}k3m*?kdb&bP zI^nbJpOrs+dicJ{hgL$!QTFV{##HhxDF>S80mlQ~jZMMr_srzFVX7w-Wx(b+_( zPiMNoao`ft(^olrhYS0#8__*+P8|;Qamr23hxT@+Zy1a_hwB@MYYPJxZNF4r_p(yn zaRmB=ot&M?HRvA23odP@rys3M4s=dsL$7o3o`@WeOx}RXxvu zr3+P{#BS@lyQHi^fz+pvvj$nJ(E>{E=1(7we%m|}v(3$och(JDNj!a_dOTw8P~=7> zPK;}oD|%ndHAdSU_m9q}&HC@fmXE%zuOea4&r3MU7ZKMx9-jz<2IOM@?X{qrRwsXR zUZ&=JiHYajo!tSSY}Ud8)+rAz20fQFoyM3s)TkNr$R07}>>eynjV8$$si3=+H7~VQ z;km@=3wtIFr}?Xk6$#~THQCJ#4v}te?}Si(E^Dl_7hz~BOcxOAKiPpOQlq2JHY;nV zFM+H1>>b`^*W)utcfX{b&-Vl#Yws{$;m$HiBCjti_0QJJ!*3N@u);!w9xvY?v{j}K z6@`*`^{-ld4dMLk4>tVxnS(3zUsWi&4bt6IF0W9- zJ&Bxau}po{1QY_tFBUsJzv{%4>&9qE)J&&wrXCdOO00kQg#IO-Q_%Oqxc6AUy{j9q ziL(iDHK3Q&E){qQj>qUYEsTebOT3xkx66h4ci1yl`gCiSQV@_WV&|7PYrbw5?rf#r z-d+?k!Rq~0*S#i?{P*n_(`hV!Rbr*-B=yfoy{@yE@@V;r(`m_}KLhwrTF2HN+zlkf zn`rts)6xl^`v++2H|mY!mU5G4FJLMMxKuv>kh$g}8~hCcm1uHmjlXqBgh&FHE0E1w z0g!7k#OPDV?Qd8;*ReM`m;08UZ9n)%e@fc4bm9F`?Y3jtGCyn~y90dwjwgw*%*yI( z8&8OUGcMY-*B%g7IrYy#AdRDY!Z071(1N&}nr;8LyxZyFD6Da1=i(Ha@6Rxsa5Vq( zf92kZvUhi^*l5Y$RCX8Lk<{9PfZ69#vKioMF~VP4z|?irw$sjoYKMzb_fe>m1X zSKBv!dm;cngV>)UHv}R?vnClFn>kWTMGQFk*K3LX0bX{uZY*#nBYRDWvI>c2}(oa)RmkP<{YSM;)zyeqZx;S||)|yXub6M+kcg)y3r5#kLY$ zXRVTUI;mxFzMiaq11`gHqVniy{oy3=4AeDthCHxm2t1*@6nCyWUAum=jr(7Vt#b`vbMaA3!sSq_RS8t}8!s)^4^6DZFZY zKRra!st-J>_gyk=iEEZmqNSF8X2oXEqt#gP-)i$7=T1OT&*opJ-fw?KDp+r;>$I{V zIR=06vw!&P4Z#+R6?nbVl}dGqp~-dbJq;o@`*D@CXXl8W$jyzJQ|jcOHmTpbuN0>= zQ0|irXG2pBLiWl4?ZIb(El)y1fH|LE@n)3G=2PzC+01o#YtcF>>&ao`U3UAQG!WxY zc>z+f$K$WGe0_x_e75LXtl!W0gLNKD1PL#|S+d=}1irU44@0*JiIl~e(+8h3O?g*o zzK?OCd#;B%iq}f_6)3Q=z+OIdZxK|UHYy?vv+7QsmO(Q^oTF7MO@g8p;5-%BCBVCa z&hVjohhW2a4w`#((EN=QQ~7PQ;*TDGV4)?iYPXkUKatpk>xi^)*Yv+q%xn`rEYZw6R-rw2k!v9-B_mH%#iZ{z?zq6B?_;=-C3FM z(qYi!JjmEu+nw=x5CMiZKWwbaObqMxS1mLrt__WU0JE){LUjSbox=h&W2<1ZlEO?4 zGPj_lw(#-^uR+V|cgHQ|^_3*_S8zkJA8bM$Wb$gf4A9$X2E41kCO3VcPs#*k}gy4Jz!ki-3mAf4Xz{p1meCFCQ$tC;fl)-#R)4UdPd-H3g= z80ItU&S33|8=`8-C{4PWIq@icnyzx+>H( zuHP6eVm2u&PsOTKgM@tu1q@b15QjaLhSbSnxMD|@l#u?ru(&P(_Q`TZPNXP znasq-UE9T#PfmI(&T7SvPuhniA3fm(y;!^S;cM(;*&n*!$hhH>7rn3UKE|^B*oUd% z*vF)z*E5hYIH8%3qWc`t&yK3M{^=Y1W-~J0LQ~AlG1h&|r&b@8k?zSt)jwCd5We}Q z>xT=!)+bCKV%1)vv?bz`HTQnU(28VzZ##{U3rmNJsz-f(8ZRyF$49U6sm_G~X!Nb@ zrx`rwR%leL4xC_M%h~CA=G5`{()*aw6}?na{~h-G^Ew3J?eWth85(yK!G}ShdB>Jg zRW8_y2x#S4nxwqLPHw2%*?@zxJ7OW()f#{V(O}D(ib(K6iMMbx{ajA+`VOy*-{C;0 zoP_2M&w6nCP`JE3$_vG%_{JrBDk8)S1ugCTDsw6##S29~4+SM-D&mJ13R6)Cp=deD z#_+$0i@^^i5``l_mZ3G=97h7a~PQHlHs#JPxAG1o#-LGZ} zKD4aW5%cgI%j7RH$lqUzc!)oaM3cv{2Q7IQJo&;K`P98V5g}PGXR-V%|H}Z4syrcm zq+n4tZ+^jncQftweDW}!I9le3uWzQw!9;$lO|a{!ZbGwGa=?T=%cVN##J2-t{Yd5% zB&+zStoKlSc&vIc*>xJ2Zc58;%W2PPo?crxxF#Sh~2B7cu*HKC|7E zTe{FZ)mYD_zPgIy_<^=}GQH+Hq0}EgdtAF-JG-2oTu*rkCdP(qe2V;hc(!oySgO0o zzl&Bb)c*N`D#hpIE^lrbnt#%Amw!=GpV9CIV!}bQIQXJK<|%HnvLzW_dRD?^SKosZ zDUL3&iXHCC8k=!J`pWv(;R3y$z{GYk?o5+2$HFF=6&}E5R?cf8|)IZyg+X&RWHtmvARI-`Gc0@LvR;ui>88~y%l>< z;c%AAHkJ*Wuys3)`QAqxHpVR^BeLMGq6z#^Y2ePVd<#1pwvUm6#bx7UOQwdc1eTY- zmRd&(Jg1Ww%NZZU4bCK>Ax0OsoOqc(>JGz3DVI%chivW?6~ez~N8Vt2(uY#QONe~k z?UZF%EBMzwx^3yLnNg|oS^`d~rJKIW5c%5*J=SlPpuNkt1}pSGPY2ELQLIA-`*XW;0Mjxx!D#;+OBfU^MF&~xBfac_zXB)>^jc>cT4MicQm?N*u_g!stz)sp&BT9yf&Pneo^}-8Qj_|K z7Nl~Cs=G=3nGtlsApF^pvAzSjC)y0$>-HwMKQflg*o#f-eG?iQ^Qu2w&blCY*h3Uu zP3qV5r8w0(K`zC3mDZx{L3l(nC_&{9!LKjulJ3}sHW?xYpI{!!xcj!U{9-4ibUx{?OqW~-{0n;*?gL6-d1*1R zKP{k`ZJaVuDv=y3ysGzy*zO2UJ5zuKb?a7VxJLgoa>^ghj)8Ty*ev-?`5(e_Ll!&K z3k-e6ZDXGyndpCgnCoc$MxWw8(zmx3Em>iU%{9bM|6-XT#XsaA!++zLAq9RAx4d=z z4-a5QnbEZ66p0x^RkqkdUUAmjS%V#;v*R^tc45tN(2Nz+Ur}f~BL5^}-MH`)$~WXW zr$|>#^`fkhcJh0>M*BjT@%1x5caM&wcwUAOOl9_Uk5(YRJ|HZT?HOG@-_>!+Fvgb< znK%(!cya4U5Gtn@=wQWm!-a>}D`Ld4`_7(?qxf*0P@ItmMV1gl@;Nh zlz07?loXR^dp|SRV`b^7Og<^KY3f&L{9azC*P}H;N(w&&3cC!Zb}tv9>V0e#LGxip z>-45QRJCM*F7Ml-A$o;w=NZ8-skR!DxGXiyxaEd0DkNDh8edVFWMYi)YQFKL+M3~- z^6SgydrM`azjl*LH6wx93spZ3DYeTieNSaV5_7WK{pogWSIujGY|gbfMTs(EWP9Y7 zB)^#xJtGy)9L0FFO7E(D^X0r>63|Ky+v;eojIK0H%y>4|V*M?eGSH4zBwjr-Qlkba za-`3;P@?&815JMtR3Xo0GM9$I=daHC$29^~hH0&{BF?WAlT>Wvr~wpk^qf7mT*e;ipqMEzDg6U1vUF6ItYQ{` z0`KF0i6pK7H8RC@@X$yiahnys1@|jw$~o!pYFtRkgpaY%H62ihp*qJ8J{_S-z*Ka@ z_!f{r6|9HgCKuiSq))%Bcs2_&ht#-kwZ z@aWcCcG@hNDq*izl$J=hjZUY~*``_&lrOf8zDm`Z%lXOiT*7ZWOMl7B9ho5XuTC_l z89NQIrP6=PK`*$u@KT|%wMt{OE2h3#jF;9QV4(6j-13^Vr$hbK!tAvjKZqqWL}`(h zFJ9`c@HtF4Pz`*yUg0|^g&Q1h2Mi}si|I7&d#x=ttz2#A;wu0_IHHSjNHx1f)VYu{ zUrTH*Mgvx8JJv*e01ui9f=Q7*=2D0HNQ`-U226&r)2%C=7X2ymT? z)8E0z2lnvmXH>Oroo?4(5=whex=iZxGH1@K8|QwW!)E zp8-@N4LQZ){Q;N;&eJDIJOD28WPkHL&;Vl@PBiW-%v!6D_IF+dhwaTh~&jXm_k7&=bc-v4T3`ir|J0 zEiM}JLF23ukGmeH9jg8(Wah=vz6r!U%Y@SuHnTT$|hY7*U8mC0E#vY6ab%7CFWr@|LB%;gALdn8dhZNm*N@Ep99y1#+ZDe~2%0 zvh%@aF0dDQ^aR&UAc@SV>JWI9WZP9=`?JM)tCr25BTx-h%?>qDFP-kU-UBQN)U5hm9 zCz3~0Ik6v~7HPuOSJbdz$S>)a(ZiY4G${dz^`a~;_l!}p{m4poL8dz5Zjp#e2=(=% z^!Z38GFhTM6di?X*H+^G9E|7+Wg%!@liT&8Jh4QB_A1M3??y2pti?IPeH2wRCQEe* zq-62Gwv;YJ4YNp{r5Gc>#A>4(QlVi|nb4@Mf5!MkbpMT;8!0P^%s#rE0Pse*Umnig zy=#ny_}bBVCx?6!;o_E;{%6+!J<*04jmSCbX?_1SXf{8S%9<#EwNGKHDN2i4Tj!f; zQ#3jYwzW@#<3GE@JqFqg25+M1zP7c;<{;J}Y#{3dy%(FMkiV)z+}!d<8D`wW<_`At zj4ljlNfD2KK5W>AqzXd$UGXrM~u^)+guoV#)pBpthLm0P@X;NqCf zqKfnr!c62Qh)-4Bte(o-v~^61AFk7YBzH15R%OrHdD)`|nshiKvMiR546RJlmzsT* zh)?Tmw@X#CFBKOIT*J8JJ5X);ff`sKUvTviJzz+&t)f*WU1s42E)P=nya6Ndq%- zBB4o!6}3QJQX)J--^qs}`vW~S9bK2^5~e9s1QWG}^L)G74 zcLF!$lJr8|cA+(OL&7fh*dLL`3{!uCPVPSrFNwz@04J$7cDpl3}_E+?o zVFH2-J`-pv>rJ=z;h>|7X{=mdkpwlJ&?SIy>IlUtBr3~^M@vu-{_7206Tp=vikDD6 zqzbz;WOLI>xoRVqCqhmMp+x&z*pmDBg&FuAcW<$@kHjxP2IyrpnrUw6^0|{L8)^{k zw)3G%!OIdTld+jT>DxDY(Nkta{l-glcdcoG5*cg#EUJB3VSDuGdgkZE^9fsJpfvjW z^~qkTElU!g(2>B>hv$I1D(_GFiNb{$dq}td+Uy2t2OZt-o{*&P04c>sU3ImL+iDL)Eyn_+gwM}5=0lIfY+1pAo9j@+-Sv?;fON#{dTEp=gM0r znTw2aRDh8%-fM(fI%i3Bt^8@Ox~`G}DG6$8tj5GoiyCNb_Ggmyo)I-LceX!2t*NOmj^mHh1rMMTS-3>@zX8CS_^yiFc!TWhv4xFr-18>lR1o*J83|OXewFkr+_P1F-Z-h zA!SWsO8g;Kkj~(>D?KupN>LGdOJ@U+fw)S~&>csoMM+hI5P7f|nY(Y!_%}d5j)xoX zWhvt(@+aG$wJZ@ifARH)C{gPW945(y_@8MZ?2LvZN4@~;rnm3HSRV|KHga!JP6dFo zinDp(FYZ%c0YP)$bcwVV@+=TNr`Suo>i{AuaFw_tESb?j_viA!Lr3a|Kje?P;-5)e zu({>uz3X?Nql@{3_t{y;A0R9qw|8^VxD@0_ThQg4-BGDf|F7{ID6R5O#Gc{`8EW_& zQkSA3r9Xq=40$U5WYzQ5bI}{gmFJd^;^!={R-`n2{Lw6Glkq)xZH(`B)EVmqBdSdG zmeHwjHOV6bYJZ%^8PtL)V6Tpg&BeL-E@P~<`*{&_;|819DMOfSeoo|-QhgoQ$3#js zRE4a?)jq8Q&iZ27Gi*eYtHm8FtlxE90z~l66oAVb7xmNS9H9z{G|J`d{6=%8n7!5o zqUUzC%<84QxDDo7*0;7k8$3Ip?B%JASEo;cQNlJE53lxG}hI5&O`wPU8j?u2_++Cua$3IQz7s3- z&2HZrx$PF>M+g%)_7sYIlY~itG8p4W*cXzmfhdvv)#;FiXI! z8NLnxduc2{*lGsDh(zKj6F}29I@A8w91FxgBbFWnU%onk z!BQA^4OCpx91v*vt~yoZQb;iYh_J@<^p+YMflh|Cxq}jy%t}Cb_Jg%>n#2BG#4VVn zdr-G9=>m;M^fYA>N%F)RTZr4C?f%EX0=-(ZA{*XsurQ0};qq=C2&YSKIh=ra=`7}_ zbk07IqvNw`F^MO`f6xOWp`_N=s9sS(R@T?rCQUf(`3pc6N1!Kh6o159z?fw6b|qRn zz%=fkj@ETdK};YLA1^6`=e|Si19Ei)eY&1)?~d}&Zb|M&v1Sis)3$mPo8jNNx%F^8@a{a5&VD8g5_n16I?` zU^(@u&3DVcs5Y-vx0hZ3cL)&0iG}(i{T#0nejt5=to0!=$G?%rtc~)mY#ip6F|EDr zcSr0)noq`*->6nzJWtH6kJf@AP9r1qbK0S>I@fT0=fzZ?9yL&FJF|S7wy*pGaAUPt zByjeEfGn?G$5$*en|dK&(G#OpHlPMH*?<|*j_M;(0ReWJpMUbEUl;Hr$vF4c&}T4d z_fOVjKA_Gvjj0e%Un(H{wWtHXPi+8@hw+!&3VwjTgpcxvJOgh2)DfG{-$sb5A z5OiaR{?s}8)~ME9;tKEU#)_$4iSvbAj#$^|AJ6(!y>KE739|8z)h;Tsv|$0p2DjDg z^{8TuVFBGVz5F;^ zO)d8i^W`%~`$ms*Y}1=H%cHWnAS^0{Ab|F56FPE`2tlP*i^=|kgXR@+>pExoq#WMdRkcG>WcC?lU z0v&pmD~H?t<^l($$d8%eVw{tKrwSAdoK!+8DJna+c)X~<1MUM zd6SiW^>yX)|I6J$9+X7|Qvp#t(M%Nh+1!BiK5N}Rp6A#@ikZ}HyQey!6VsR5KKdJE zrS43Joo=8o{?bGL?sgl%o%X9sVog}uZjt=%e`z~e8e_+1I#~LjP{oh$&>!?+0zJf| zRWTKS6M(SZ;^*hh6PR*Ad~@P}mFxSCC)qXWve=F|9nBmuG#dTk=csmfXx za_b?&Q8VB%L{--hAOBaHS=!}r>(N^V5_DQb`S>Ev5LQPZ z$M;bVm49K42T01rkQqV3Rlu|zp8Vd0q5RD>kl{l#-5>e9UUH)br09BkATzX8B}UtT z2)$-3y2kBpy3kGr`T8voOrPhSa`Cdxl5*&z_lDg9ATE^MpnzICi-7Ko8=j?b?QfXN z>+f#;o~|7rqy%Y%imeusdJ1(0VhZHX3P4g&Z&(6XT-yc)e=vD z`8!CCS3yevP!)rLp;0~ooG=MP>h->{i2scMex2a{P+!>!{F+>?*~&Nqc8GR8i$j9Z z(JnIw3cwwM|fn#I#srHM_xAwThq7fFD1`of@xE;7bh<>_DLMs{So0}PVq5zJx~{K8 z|5A%6rB{A2YTO5z-PX-857GKIN3?w-ljcxkw}2KgUSdl)?i2@0s-91%snzQP6{nvX zm$W~r{A~utH(*gCrsDDqJ;(tkWo32zZ`9wb=K$5jmjy)?B=At8$?y|1Ik*Dgu~zGD zk8O&y)gW7Uz>tXi46uTxrRcnf=+#Uh{m)S8#Bgf*2J~q#LjZ7p0VHRzS#VMsC%OQ` zWLvyA%*WDSp?56#o4y_eCTC_jQyq+(LTnx&ChS0nRDk?SpjllLsFKCH`XtQ; zgg~#@p?E5C0O=vi4Pp&L8KvF;A(A1{uwpCA0W}{{!Wqipz-+%%lMx|;)e5~5 z?Xc{evakQyUqxcas#5SsIwsHa2NiH6O*Q76K{_M$8i=9$N_3X2Ia@(GsxRZ1al-=g z!rM8rU(dc{BAGmQB=-t-lA=$Md#+bo!+Thj#J3xo8z3#pHov78%H>fn`qBRqt(@2d zJ^q!k$n5CXRqNGv&}vuCPLc1wrA5D*7<--i_CLdk|79dqXzvxVhq~YFu@2fz=$r}I%g(V{MJ6mvPYb;G^4MNVwI*!pER-HS89|rx#0=L ziOFj)*(<47j^TD3ys=LI3$<>CpJ)NIkzr+yp_6uJ&iQjnMa_tMnf{(j%VzCJ)_$C z+`#X3ArlY{S$4zr4uz%ckTNTuUld!wQg$RqVbQAGxH$x23U@LJhES!%*v?39b&ED4 zhCs5lC)eO?A|~L{danHyW!Z12y~fkWE9)QLiW#H!Qdmm#56n&gDTQpSPvLA$+yvPa zxY^J-7V`~YL)4B?da=!L6X3^(E@}=( zZ};f?yT1SSI?vYGoij6g&prDLu&T)_hiR(4@$Ra-C%!VPi-KR*quk=Z7A`9teK$~o z7h~7vk9SwUzV-Qp3xe5EvOcn6zWy$`(896i_fs+e{OuBJ$Q1ii2pMSEG}DCh`~Cz- z9sk`7S{{m@J&tt@g$1nPZ3IT0cX`E~EE{vUm9KMdzpWwkOdU4*&|6VbvF?`&3yEpm?3x%~-mAlxd&|R~lCA zl@);D%@`e4A2D@;N6$L>%pXzLwmM2tzl_KPo2!hoF&T4m1!xepxkB>%JCh(Hpd=tB zCK5vdfD{SWlL2J}qa9yhYSp4_0%(lVs@kJD@K3ysQtc<)Z1b{XHAJu86pvyfD&(BC zKRBS04QQdxv_j1m0wD^iuDT|Jg{Cle@T@y~&4&pAUq~`AGeooR@E`ge`{^7s6&l-F zN4B*Z?p!arx4}=b3E(qJ2Gvr9<5Fpnu;#S!vex-lPY>|aW7I^E`J*qW+494%ggKXs zCHQ4|40TIasyD2;I27xsn{qq?fxl&WN$3Bdx;ZOddr5rIK4e8_vLHGXwC_>c`egdW z7{GIU_PbtNay$S5{H%EPwv~|m6GUNR$EB*7VEjiiU(EgHM4fW!pA5;>E0F8*+AK>l z@gW7UKGC(ECmQd7W?^4Bn`(HN!4lkdgc&m5A%z1@(zsTC9*oA4wShhYws>Osodkh) z;&C*iJ-Y%`5F;LTnI}Z*SQ5KKWIh0zi?Yf?Ayyc0TsBn3?n{wZ;ZbX^NEtsx-81GP z{j&X7>%NTx4{5ZV;F0e#jwKIU+(`}Tx5kE7H9?&IH|O_Ip%`1ByD*~*IGd6uXyUCJpNup}AXY9F1z$;mTa$FKG> zIP~nv1T4!C0h5$bo3U&PjzM0*&GS+mz}VC}P0&`@Ie9ID2oU8V!)VL&jR^3xRK8WF zz%vp&jQXa>6n3~h03QB4wVd{4mcJ*Fl@hY8bSsAv1biCJttK1BfF&|j*(ZI*6>k8L zyIbW28B>ptXpyHRZn@D*5GyK6dLl3y`&tj08~F^4=7;HnwaXJ+M=$?@bogpj>B+zW z$&`tANh(W0%!PXZeN5yP;6<>c(_TwQfrdvvKm<$%hdF*pf3Gz~_XBxdons5xyBfaT2+i`9b4+QXF#dhs`;w7&N3Ya8;JGna3^nnlJ`k*2G4Wn62G z1`%8=IK8M#mkQ>@nQhc45=Ki{nO0I+a5^pg?upVqV+jrrFPLp}%EV~cowC8?Wu%LI z$r3E%9q2LNat8?+g%cg#4}k$f-A8XNxNX3(c{f+oK?N49x27IFasX((98c@weX#k~ zYPLH4H%#f5R!&VfT;<+}75kc!ITsS6*B{Gl$FOU~&-rj@9iyLm(ZO_xz&fG9e9=M8H_5X5n|SB; z@|EJT^|ay6?K}9a_-7(<@pCgbH2T9$qjI{swntLO@|k4966b1_<+u1^BIVbX99&+~ zU>M~n^lam}-VF|6zF&WbPyB3le64!^t0Eh;AL9&n9SJW(3&iQ{;Lm(t=nfx7j9nUG znBsG`n+aDXf8)7ZqX1L2XmosY_$Ow9m*3%#1Q`-H;yPg&ze2>y%#Np zr5+Q5M@q+>PpVZ_LDR0yl#Mu z4MS6cjZ%I=9nd6bwAt5lZ*dGzK!S)%1i@b8F`MxOVuj2BCk5SYnGG9SAD$&}`vQy^ z8SgJUphIHRkNXbx_|WUfHw?8SgkJ2ZF*k(|^kR3@05srClo`S8uQjI2-@gy)nmST}=G&-+<7CZMQn{|kq zKJ!?trcbP2YQK}IjH8zs=%fn!urDjbI>dp?o|IR@Bf(FXV{0Pp1-=u@ZK)KKurbCR z>kyX$dHxrR_qFMlscyLvPjh>LNMfd@P5H1NKkhXS5FE5iZziiH0m5;4#emC;+lGMs zzLaiBBPej9Mjbw4{RwtmKJHIAKe)irhJeN0e|41!h}E*hArmfhOONuMfbs|ZV&2KX zIg=}#RYqiLtoZ6E4UmX}JBbxqtq<2ONji zJIC~%U*-gTv(MwRzc5{(d8>uA;R ziAuT|wa|S}xgae{_EmGe+?(Ye+p&^&vHRkM4a5i)vQ`~jhUiSbONV96)!rcPXNzJ{ zZcdS#v^1j)C=Nt3+$?a$+*{=%OQ|5C8)^A%8)?-f+>Wzjd@nYy@aaoci(ATajlXRP zINfs4v6~M;L7hX&f#v5g;FPvH{3^bpY2eXcr730g>-zh=UCwjOP%qL@uemj52eMAT zZ183&FS`UL){(q7w6CAE|XzO zF7=<}*wX&$9T{;SeU3%;D&n2!oUDN}I(tnv7ihAy76TlS2cnnB0zyvGbs~vze;YcK z|1cIxG|rUxnUddH-4eI{DwPu@=vs!^_Ol{ex?jD2!lUnKNLhp4d(YQV>HOGiB9Dca zgP)^8ZE$!08iCI*peQ7gEKd%80*N6iNjPaCOvo6Q2%?=Ac!dLWm9@zdR)Od(-{iudVk#x} zKftq@UE_#{j`E&*%gmp0PjaO)^$&>mxzXO{N9o$lnll>Y-FU8>v@Kjx+O2_mUH|zM z)+@`TDmt8wv(G8>jvqVp+QYnnx(?8xYqn!IRflY7P+nYS?URg-=;z{lwBR{ zYigM{1q{)ob(NzSVu%tV%iobbYSsxWEl4Y)6KMAAPupK2I6fr}3X*m>6H>W)7rWO> zc$XWIm&Smrg`4P*bwFhOPy@w$nLpp`(n2iWp8+vO zV2}QUmveB)1SS_!7z=C;*u5>Y`|;Y55?hmWINn55$Y!oRGEW5pk4dEYwNuX*=)8~=W@N$cIw_7^Qiv|)XP09wBF}x^u#h~e=;|b`K*kaz zRr`eBoMFJi@m*g++`v-+iP+3Y;E5E=eE|L@*FNS>27posSjNvfmmeK8fpd%6qGSoB z`3N;Q2HlAx9h^o;mz@MAEfsx$q{}St^w^@}9z^>&F_?pu0F57~4cBoo4B-17xQpXX zc+kr=Ix-d(cEKVk_r3J``k9}kU5AircN?6A8ubs_(&1UC^33qHJUk1DZ6yeFolRWPc6?IwIfI4h zqvvj!T1}P{WGr+D7_^kJBaDT4r$bT5Sm+cgd8LallMIeRjwNeX{?X{34H-~4Ut>_T z;(3?opoIa{>crF^q zny-{b$O}auM_Y5<5%Pk!)VFXM2*OGHYB-=H2B#r;Mmv)P2?T^o_jt>WaOjTbv>Q2( z!H*UN-iuWKICL?gCQgJ1ht9){gVhkw>Ux#ma{I?~q&@~DhkN@eD`8iZ09N~Dxy+}e z5$s+vopoZ^kqX3WL$epkHDGW^Y_cOP9{i^G}dayG|2d%KoXUDbya&oJ6Y zoW|Pv=`bIF%}vD0GeN@)J3bLYE)M?w0e6BoeJ;Enu11y2m?N}-*rB=-6XKm;gwPI2CdFmm z2Vlzt=?db)|@x zS1qbSnNaZ`8rM7b)94=>$1q|0C5QmPafOb{NAH~~!I$tg53>Sc(5W+B3;V~QL&aa4 zL>P4XHF3r{qn$H%B94B&SQHy<1H_*A6YsDvUi>j$(l{D1`jBBC`Bh$0(u-D(Lc=`( z$VtWR&<{gE?lrUH5)JTBR|%sIctVHyp)GkOm{I-@kh3w7)gi1*E(~^@S=z&h)b)ls)iuj$O8-l>IS$16=)Sad!1?M4LTV8EH zz_rt|<{!o^*r4-G-u16jay^WPo=ezn>a-iA(S1FeU>)9H7^@wdsj6PSkgx~18Squb zHCI}TJUxsG#;C&(NDh<1TfRTs1dZA{^I~7591!OW7q2{_YxexwR^+K=r0hsBYWU(U zXxt@P!}^a!7ZNAR#r{5v2cUBFBlM#t>Hu})#7>C|x$hkgm~$hh&aSPm3_u&{G$)^` zhf8C%*E`7ys^5Xr41-emgxu%%@Z`*CFFF1ai8I&DcjSTsN7CurvV0`qJhb=h2GA2r z^VVjLR!W~BW=pU(G&6sl3=f=$3N7MM9dG+X+;``yEw!pbEj$zvr;IZrHY_WfAo#vF z^jV&X>{PDkf*%v}SngZ-K}ys#l|Eo_5d|Qa+-@hwn-~O>)7$-S{g*fAg7HVC$rWH` zENiA&q4e0-0MLfk#Krs;`!BeLKN;I`nV20wX%W^rIh6x|O4pn|ohtkvCTA!y!!d7j zq6D6!WqeqeO+e^#b0iMRKA$k2hjpgTQ6SX0QAellD_#JvLm4}n*KqwCc797fr2)-I zIT0rnYN^-mdc3jo0pxQ>C3ZH27+_up$Qj+6shPVViug?5TAsbYAg~ww95HYpT7q!8 zA6-@n$yotmATJq*u{T!b0=|G4we2>@cMBS$(O;ae#h$BE#9|%Fee?r>4qsBqAGHub zCx16I(UR9*H={Cjw|x0TFweW5lGxU8-S{pU7Mi|U)8i065d4uCMmtO?ism7W35pQl zT6+azIV2ePfwT6OJj`1{85haoO*6kt-TOS(Me?SaW^fjGr~H_e?hRV<@P%0s(uu3D zLMwE-(f!)!wiOT8KKaq zmgOOV1!YSoySETvDXiL$%!Ry!raY0KH%);uxox-CbqB--E@vb)vJ_nKLmqfJVNsI* zPCXP6{fNsg;uLp4i*&hEb$S#4+|qfCewRjo+X&^XFkdJlCf1s?yG<|qS6vQQlmUfX zC6X+e7a(k3rPF2S)zS1|04SLtiO@t0aOlLyqCZv!Wv~DnK_^TcL>&vvimrFyF6H<+ z1AyCJ8O4rhR}};JE>3uSGX!&q2>kw`E-!K`9dhRk{O2%_XM@Wj>zj<69D6Y0HJVU= zPA}Sy;Y&+k#=62NRN36}C(n;B_SRgwD zwfK=b)z%y(uu#$cUd4N!5V|dj+@M68C4wv{vAC4XILLyUyZtKkAA_!`@@}j;WY8Jm z$V8ic@d4Q;^91DIzj$ir~l1`%}fh(%QxkBttg#0NU{Ng z?)hFGpLm3$pXYAwYUL~RMpaVsExOJYO*6L2xHOtqrl*;nAo6Swn$y`bJ2KVTuf$oS za2H7{>N0D*Y_X+36I$zTNCbn({f|wrE8pg_134ddlU>C)Fq2iRu(cUUJQ+)J`4ooa zD$cCU-ChPs1xp9-67OH$kKu?%m2z^pQa43SR<6ea6cqEzt*mJE81>4GQ zCn71bXXlCqN-44+ujs>GOr&TY;LceENWGRq_zC*Q%@zoA?y%6inG<9c#WpQgwf<$! z^;^5SS?Amiyk=-zVW8W3rvYXw@`|#O+=mhqkn{RGJLLVhK3KR1SapEYB>ogjv9cFr z8+MeGh_{MFLoZ};r>d+TW{dcGWuiJNpny(Bc%&;`l@TY`VDQ)nI=LKeboRmyAfU)` zuXh~nL21AvXm6~(u~J>Js%@(DCOt}8wCNc>$RheoT6W?Q zU;K>|WErIo=M3f|ip^eUm;o|vqpCyLa>=i&OuvSJOCsp z@dOA=7x%}3blKhFsA(>cJ;oq*)2KH)7jJ8EW!V0_Ne)WLj^!liL;>^ry#1ZFMLY0okPd_3cnuYwuYbVJqQD2IFuh>MQ908fWXOV z9Xu^SyA4uV{ViDJ5AiBNp+tGqCGQIO4`bAuS&=WHyzr`}t}xL~Ns{jg9i(9FZa)1- znES?NHVAf(ZanbD@ zFQ{B@;Y&B#Zbm<4)Gz6phk1{tzUJn9LWms`U?+4$xeloa6C|o8PoNDd(;;)bJYDB_ zEXmK{qK<(6MN1_AQd>31nTGrIXAC!1`nvL|^Yqvad5FLCE%k@)ztSTE2WXeM*14ij zAjkEqM`7Ud14~YJ3~%pI6In}6PRgU);5k0LG9Kc{>XfLkoFCzBJjA5^Ikw{_#g?4U z8^u|vbxw?JL3V4!2Tw)g9nd6b%HjSnEuhJ<@C?&3t@;L#Vs>Y3KTYtzuPpF^4#(7EYnrUI>yRE7+uTVE+?FunXv-S%Nm>veN^d`K6) z`SlBu;HtYl!)gQCwtPshdHIhd$6;P|A2;$&X1`xS{0;W0Vx zf4KvWC^xNky96!3NyutFs3;NgMFEY}^}PN4->D?V|^&JOrD{Zyyz4*w`}yyZQCq?fOQbbOo0 zbS{#6K%g$!j%(Q|bWX6ZZeflNu!tvq%ThpyZE2&6>y}BXbXa~B%EK&3sXgCqw}s;x z>Qbc7T%W$IhbofVD(BE5uvH4%=ndz_`wajp+{dPjHpzkv7gJCZm2-dQvel3aGss=l z2}}Evl8m$pJDc@Cd) zkLu;f9SXGAg{BP$W(3SW332~8aOx&8342QuV#99g%AwLoGki#kiV@JFWNBMY ze?x{`mL5OHTAw*5SM%+38j|L$LvSNQH~su?~5#xW+VD40QVx93du7PLLP z3t7q>5Mb%&?IfT_02W)DOEKM|FjZbaV~oBxQqZ7+pj-B{l3~ra_lv+ZPy|(ar5i)C zw$YQ_0b+zBm%^tMT(UL*OibyO%@Y|-IY7sj@OifK$QW?x1Y1c4_6p!#3dH^5i@N3x zkS_OG;Up|{(ryqixJTkyErZvKv)BL?uE|WKI}%~XB}zz?%ISc9y7&NL;U7D$H8sU< z4sh>qyoYa{nMk25TR;6t16)ng>FjX z@JmUN;CDb|q&+yiTJyhoJ9FDEP5v_3zQ849^NsxwA@sR#pp5^S9mXnJ<7DN6rKO!2 z8xxY)`hD4#7D;TSwr0ux_N;m#M2z>`u&s2ggrD&)?nhFY6u^iht+~CelI9Lzz2t6+ z0zGkr4>u{6$F$_0)S7dU+>wS$QX}LU?7L zDD>0+%WM5o?y6_i^34hJqma$Rasu9X#fXpf9=s1L$d!3s)6QDFIp$xR`w9`c`QjJb zFCZdUrZw9aKixRL9Y$aem3=;=+ ztt?nUZ1EjY&B`560YLU_#XeYRo`B{gf){icRSOCl7>7AaI*_A))f%LXKyu(({4tol z7W$U<8`rHF01wB<;Zdln>wv>iEDa{pIpxn*$Lg%h$6@&|z!AN+kW;ah0Fo4XGP070 z4Iv)K2l2RciEKMbh{pw=?b@QKfFq6CWmWp=49JLE*qpyl4S3tNKL=j++0~@OqfIln zi5Zg6x^vHdMrsVyHx(hrRL_8?s%43Q2fCgb;Nk@~p2uO%!Rq07fRWHbnp66)Fc&nA z)zNzvXAI%E(LGVs0_Xf=@bL59E#o+F-UXaEzlb?{gn3KnQ-gOE;w+59Fa4>KbrS|&9`{C5}<&{%63mz5`yN1dwmO@GlDGbuH&C-x`eb4 zdb^X5mGuac;>6<1cGZAx!F@2A5FbD3rweG42MX#|5$H2P}L( zosJzmCO5#2x}NU7#wCq_acb>uM=}$VYE&_v38$@0nAg6QKIc3aq;ExKL{(FxiVREY zbC;!>yFKH;9Nn*w93cKY{9v|(#n?uTDuF(YJZ$3@0K=-%ZVNPqTQBelW zX{9&HLjNzPRc2ffl?H}|sG7aj=WAKv@t1MV*#ZyAI@>DayaM33@|z=z7#|=rZn0=L zEaw7YGSLMI{>P2eOJH~C7#}vO&Zwo zj^W0VQLhyb``lvzlg#G!nI61o_D6nn4?gPP7Ca0lz4E1{W2TgOZ2Mjk*Tat~*6vT~ z3zqOaL0apW8@KumnAW;fto|;O?$JjbxlU$vN_8hJwC1;?3;D!nq=DUo{ryZU_%=Mx zg+*RdJck{!2u=&kMowcp>su&S~t66a|aSk(1d<$3NL0m0m$u*MpXMF32A_s z`P+_U7R7=`x>Ji^BV<8*=cZ)Nc46zkoL2TfR~C8z&(3ph^@j&P;bKdXC#4fx=>=5) zfZ+H#nPW2sBS6O-rxSz)jlq2&BQ_52#!#sBBLx7${pR;sCHe+4TJM!ge$4_&&PK$p zQ?oe`jN3b{Gs1>3Lpk>Lv_go=r7xV;l0%HYgJ4_?Z95@81LgM)+WdE%IUqXBQ6fp@ z6fih6k9qns@d}chh+i03LI7dgK0S2{Jm}O8ILDnmj{17Lq-?{F5yl1de;TSV9?d31ex+vcm3|^a0Qo{)OhFY>0PT zWVU$~+M~3#s@-{IRFG-bAx~D~Pf9M>2PJ@(*~M*#rz|9bOnb%Q1(_8X1oUirt6 z+vn}|jW-JdjBAStee>@~dYX9bpR^{RtNMSlC!zU5K<-3Njqg76Zy)j~yfeF=((?dd za+7@QZ;CX49r|HsK#U79Il5mx6Sp8H*P(ksm-z!?a#3edA@*JanLMPiU1hmfb}M*D z34*%oGuA>ad3Xv1#0V73StL*od>f#1xc!pUvYDsp2azbZnJ9iyQj&-i< zdpiWZt^dKTD=i7AD1u>GvgbP^KywK4s_VKUz}#7n-Ml3#)J$#e-LqLRUr4U1_A)D= zaNh{XmHMs-Z&t|sP9I(Q=mR_iJzK>bVS)0ppQy6*0U&AMK9xwP#%gwZJ7Y-7CXTA+ zOK5uyfU~(!wtk>?ofkd?A*Pn~Ew;CRZ4edhT6ljnxRJrSZ|}C_?<^P+G8CUSG(lin zwpM=6)4@BC1)1>4P1OD#hZ{Hw$@bfP<^ULO{6m`i!c)yc5NQ!QBM-Uym7B^;QRBc#b|(Pf-b*^;YWqJr%B(^01ZJ9fc5n!Q3{tl!;}Def1*1%}+>R2ffmC+sPLo zD)+~eYd+7Nf}l%o>YG4->DhId!>qz@NnO*00=!po-F$6;+JRG3*XFfo#pl4IVM{zC z3~iJFyG|*WaImDTB-kyKV9 zJTkLy@ZO(=qapUUd*D*J(hlawyPoL~UfT%}FgJl`qx_1HjAVE=iWNWkh}{E`z3@Dn z{TIkRb0^uLHpMiY7%4K;%FY ztByVnlEmtG8D&nie|pZ_nAWuido-wPqf2mypF48)esItB<9)R`Q*hIqZq1_w-S|OO zim1y)6KxHXRaf7aX)8VqyL?3OV$pEGZik}n(h0$fh0gQPgz)8(r(Ac(J5@3eT&~b~ zPwU}j796Qx6CJvv6W|kk(d3lVe+S}n0YWlAsfDpvg1b`ig<3nFuhXbeP-HC-uHcb) z>+DQiK8}s$pG0yBQ|P-W7El0MS2}U*#B?2=sQIlXp1LU`xW5GNRPX{bl$WsOQbI>& zJqWp^4eV58fegW5)V1EVNinX9x zpM`*Pj*3wMeGr^G$Wa?qPYFqxDYMp@Agp>BDDt(Hr#}G1j5B_=eX5}?|7+6|7PyR&&c-vl*Js#M+dN7hmOP*_r0}RuLx;RYIRMwm> zyQIW4jb4F-X^csbP5P|tr1E|aJxE|(2wgd=a{@QUsr5aoY0F^%38wnb&L;b9A;xw^ zw}W6f@a^Ty)csgTagY$?*Xg&Q)A}!Yb#R0FKHz2N|I+;)D;2098}k}~*tBByJ1-;p z02CMNqctOH1AbqQcT)cr4;bSFpHquz>#st7g7)CjsU4yZ3g>n_ptI6=T$?=w3LKhK zT0YzmYB8GCS0;!0VI*>$VAxUba^`ca8g5DGuPE1Su{%y+K%G>6*jB9wqe5l!oU1pX z6?)KFmavZV0VIzZ#wND+NJH>8CfM{BF2d*^^RAj3?6{wDJ{2svQS9YHhtE+AFfkM- zzCV(HD+kcEH0LujzuCtir!-O~qiCMU(*yi&Ia);ZuET@~=Bh@IvGz;)tij9X?7V4L zll4I&DyO4qbJ%~E&C!%dhpIdMy=*T0_1zYhDsKqjH4WByXM}{e(1C@N zN|EU|3(&#iT`8J8kF81m6lMD%O4OkjK(82XtbZFt^vbK@??V9W=MZH7jqCXB5==+@ zLXSu197O>!6fJksG7or*<>T)0YSifp$K!WPUq$RfM4>ga4aB4}7!w`Tm!O&=v*i*@TwC%N4rGok`sK7A6g=R{7aW2?ii0M}?ODyANV= zv2K;W(uJyeOHDROtYx- ztK`q#U(d}{VCoHEQf`It&)%hdMv=-QsV?3$Hb`(pqEM{ngj~ZBp57jifh$AHtbZ)vO;taXz6fZvB{R?7&Ru88_s%D5ly>|tR=Z1_D zlQB4h0Y#=g@YD-T27%}5o2)}%P%wSA|ByBW{Ma@(cwY1y6au`&Yzs*E!8IPFy$byJ zbU!N`uklKcj9s0qQ2u#S?KbgsAdywcvSVTO@~Z(p2OWJzyr zxhs;3J~1a>VtMe#)V|fh&0-e&!Jp@t7HhvzllI)t7(}`04X|15MG3K!YNGT*Tc)$( zqU_CC18Gg~I68bs5r6TUkjQ(<;CI=)Nz3lV7|PA=8ugB<&nVp`f1KSPF#oidNTBy- z{|D{{;A_8w^{`tn-)B2K_bq$JA6`MZFx_gm z$7BLdE*He-g~jnBG_6Tb_P1CKcDLMd7201UP@UGAvrs3SV}t*&R8(N%wOgnfG|z4L zQrLXRo$}2~mptk1`4-j6>J|u5-)wDc6?`&%Sfk_tyxJ~8XTe;6S z=$of(%_67Oe0HRzepik@(G(|tJIy;sca7_~Q}5pSyo=g?@sT;Kn6Vw^>*r4BGbY{D zv2p9r-JaI?32&FRFZOw7#J!980cWL!z*>`;ldhOPle8ss7NKqWrSzo?)ta)~MM?4A zM^dM!CVvQD47gcU=Fz$ARKN+vR2@uZB7+ACzw1s+8V@htihmeWL3)A=o}DvuwChgl z1V=&*`;mB10hn-UBpM{!I?3-t8uPfU)Sd#9sj7S0XuC%`r6Oig`uh zYM9&}84D|TZK2DZ+6s{UliTxs7Q^7%qC6~VpOl1I-E&biRLXB0 zWWm6z27Nm`XOANJ+xObb0d_F9^*Mg`Q~`f+#d{}E)6%1#QV1W`{IdWc38c**ulmm; zZk{q*=$K3grN!wdZ zY!AKjTEF~OPu6M-vNkBq`mL^&JVP=+dOos=z6zgavg&@#L4L;|=05(6ln5iEd^WhR z@52|%-6e7V`-(k{g&g3;Xy!GycU1hOnczEGrhmSFfXpJEy5l4m8N2(B(v%!BcF=Um z=vSmi=i%{vg+IA38fs?0+;Y{fU_#cEoax6_B+{m)gR`&@DP?Ti{BP{4tGU^7$nuIx zXFD^1u@^P-htI;!krDaR%>oIL66xvUhm^nX9bLm1fRq%aH7t^m(vzeZ0r0EvZA|>g zcg^{e_ycekgAyH%RFGM!V`uoiMn(~DZEiXs`2e?Mdt8CGh7s9Dkh9SNh7mhbR4bk1 z7YDnC$+YQwo|c33zI4BD?eEy`ZB7dw$g?>6KjANszNeX4pFmj&b#I(|GS*-P7=LN^YE-WZ5(m_I*T~DmLbw zF7`r}u~gNvWLD$eCRQVcu-_xESu9~q^utMgkI@c^#kk_Fr1pi$^`nih^_a;R^Dg#1 zbgYI%SF~=uWqcOW*L_=D#?3uUJUCmE0&lQ|@_s#a*<1hp@@Cb0)a|*`!C?+qU3iW( zmJJrt2p*2M_b{o=_@L2wg&v?k0QD=~#bn&PHEKN^z?Eg_NW)(L;#BHS(TWxnZkpRk z&hVKfcLnNOA}24Bk9^1bs6uy~uAeHZH1ob`5hDKZAq)!5-Zgs&zO_|b1n=7|=!5rI9$v+}5 zng1=!hwTWzW!*;HM5(&7*rPS?9aZH0Bt7s34r)5B$7A4EnTD}vWmEO@icfDn*%&M& zg)30`cI5;c`RzcnBJ2RY;}regtf_GZPc$qDGF55T!TM1w6A?C7YCAx$Zi97C%eTlm zYA*Xa)J2tTB8@v&%e(a9>lK4P*2vKwcgs!>+%-$2$mg*o!yxEi*phYw%_ZQEvpd}LI; zrMqota4aT3^m`(E6XMEZA_2Y1)k|9696#moQJ*HUsqAK5ni zY}Fi3xK-6`R@5uk-^YONPO1AFSdsbCb|>*)2O|szSx0EY#g&ezk;j1VRO+MJ#f;SH z7u~0tO!^2Lnkq7XuyH5Ths)qCNvCP96APZIeY2-A%0pg|EKbHAAK7%~RUV^f_mG+s z+Qa|7Yn$BdN@VRwm`!J~;j5kU&$pr=o22d>ncs1`^z`)WidNs5V>FbehwJnqoBoY( z?H=Fm3%5CZfb=-zNzH@^SyGv6arf3C^rz1+nXy)b$o`jZrn%;rE}DR z{nOLf>Bby&d;D4H%H%^PEMWh?<)*B#*U*LQ_r(49Y3yboSgb{}t7D;o6rh_oyZF3h zkzTENm$I}Rza>F&dM)a{u1kdU(z28&ixfQa`wox=_da12tHJU``pA`|Ltd1eOr{A1 z?#qagremLm2iy&{&3c}Ph%{N*QnZ`ju%wtebs_z?$1c;(Q(BZon^8*eBcFso%-HYcn^`3U$z@>5uNt<1f^w62|e#uFO!`>O)XR_b0k-% zAMBy4I?ProEK;v6GgJaaioRbUgeb;}{M<=I^_57+YHGp3bHuL>B05kZ>=_Ga_{d>4 zLrM$$-3T6>$7-2d5K_PKZ9DZ6(wXIVvz&);8frQwC!2_h9In6Ha*U3i_x&Ti+1BQV zi4Bn%&@=YiE+a&Q8Hr`{SND2Wam@rwaOP%9HQ zV%!9_f%Fq0p^5`oJn-gG!^CBIK6OCP4wu?v#|R+(`-E zrYh2}=oafVoVa%0mUze!K71L6)nhhkq?Yxxa|_;U^gN4q^h1?3aem0!-yQMU^C3f2 z<0n(n6;)jL-B>2lD~ly9Bm2FT^i}kD=mV4^{*+gZ+Q2B>N_4OZiLgah$O+>xqzg}b zQSn{bc#mjmVLtLXh#qdzBrr4}I(j1G!HOv}6r;S6O@+i{MV?w*^Si1zM|xyn3!m~+ zTam8d3LwL_f4h}xE{XJTR5D5F`lT86FtwY^_20zuuEj|K+h~B*5VWd^2-ez4+usR* z&($aC86SxsnCgMr_JE&FIu7!YCox-#8R#G{qbPOaE1{M48=cT$R)0)pUJ)M(ilw)x zMk;S*dEs|(ccbk#r*%9LwOA12P@-7ycjoo zwKy=TKdae_9;6_;N2zFe>I&3V+FOh)xQMysP|GI%YpePMjvqs1WI3I38?ja94K-9b zxL}zsov2t>&*dR{Uz0^cqFfOLZs5pL4{aYWC8A_hr+i3|-^uM(SJA;691KR&PKx#S zLB(A_F;`9C4Q<%t0YiEttDA^WjVg#X)y^xv6Ckf)N%;VOJ^wS$w$g@)Y;3}}!(2ph zD&D;au{pm32jsD-7HEGcht;4Xg|-RQ@jI#m=H4`NIO+WT`2M%Z1nd>JX(nC$;VzL@ zrHmURs<}9+Mjja=_sJWpzt)Q0vqs`QQ0Z&U`<^e>KEQb7e=Rdj}YYw|}e(W}K#Eh)tN1X@F z$QpMCu|Bzu_!(ybE6f}hyg2qG`5*p$-bzDXu>O8UBmN~htp9y-$;;gTeR722kJk|| zVxqEZoEsUOCW%37rhvI3&E4E>kj3j8S@l=$z%8D>0u zfqc84KjjVg{{70{Da3YdO8@=Jimm3BCvJdN+2o1>bC`&;Q9b;$FF^^J<)e?HVVidK z@GCCveH4m((3i$*XL;fmNSO1kN2CpWxfG(Bj#VxDD(TwTVy{Uo7DGi?u>?YbfP{*&=jp@5V+N6AB@?u!)L z?^Z*M3XGXjRG12@Iob7>t~f`O7G7bvgHGX)AzF$d%SKAOtVOk)rMT>W5s)dnU+Ff< zDsFv@9)7znc9{EBTZGl8Cu0**xi?;^l4x;KqEF^kdq~hH3mO&C>R+bwmHbYClPc9r zpvNY-K1iHEc_~w77FDYKI#+dc6(^@Oe2g9se2sY{zB%n&3ZKsWVM+jh}l~QrQExJyhPk(%Ne~E@pH_X$rre7j|C%v~ug& zYWMQ~Xq*4zooa*RC%K1{8Txx~Dfa34XsaKjm}6uf=j_DMfWirl5i6%Hjy+<)=+NDN_lD{}4>Lj9G zEsAxyN7Tu_I^qQ^%)h>o*CH6~O5=?F>2)Sncnha-jFgtlb)K##Po|%{>iN7&vH7|3 z^@2x6v^&YlrflF3M*t@d@2l538<`v!zHU;tL8`v6_h-7cY-V3cVY}CUG1COqe#~mm z*>tXD)IIpf`l;<{i$75Udh>*->BZrPj_8?8i;ghWaCZ^#I0?O(zo(I?Oya|vrkgTe zI-7&bt6JXGTAiM}ruDD!g{FVixy~3Uc4^O z{kP$>-AN3EkbDEYYOQ)t#|m9s_CNl0+@)+LQ^lXOmr2y3H*!=03}9iLsVL$;sGiCC!jZbF!GDm#E*uq;JvDB+ zQd46uc9@f8Yr(Y$iXifucrF5`7UdPuRR^al?mW_ftk39pyi+ZF(tPwXBwr4%dgiC+ zQQaSPN@N~eQz5CYs2s8Qfk$mEG=0uE9P#*pW!d(6vU&CX23|U3;m#Z@(eH_R(Eq4K zrTvoguAXV}con`MoqNX0Y=TaYow!7V~3Lq7*L$rJg^y(({{^njf zTs9le%F}&_et~8s?FM~CIvv*)c^1Vzro{kLM@S82X^l>al3IkprQQq8`bExK7qUHV z{;pys&TJ`aGtqH)3=%3rUPO!N&8I5X9zR}Va&+Mbj_Ond{-DF*=mE1KXCrCAvP`L2UAFv2yzx9JBa=jxBRosm={-LK-vCs#Pk_$_cSK z7Qth+N~V=W(T>mHebzd6FY0@^Cmh)nH)QKP;W9psT_RY~FzP4;Kl|46pmV+Tw;=~GrJ5k_=!-n;HE=-`+)qXzE6AUGzb4Lv<``OhX&IbEWPJXfjCh+q?Ud?g953(B^ z;MXI=F5Z1asu*(GLjR2}Dv&gZ2HWyl=gl78IrhGfz4%))j-wtnUMhREa9!g38tHCZ zGAcLnNP6eG--p)ecRGpgg_D<&Nzy5jbiYR)#a1+$!WS47Bt_FnE2{}Na+dm4Kd$rubCUUhsO z7*Nld1=>_I4fA*R()?&Csd>Ws-j-UiPMZl;<*80&=(+UVRiASls`F$A7} zceT}cnH=+y!+PhuW#$eCq;{urmSmPFG|OI;Cr;oL(x$SU_siJ=0&r|c1nG^jXZV=V z31$V*?|fgkf71S=r#EhD!w6KI5jUGWeCH-evG%Od zxRDfSUHyal-!Gx#UR(S?1_hg9ISFvPhX6+}>WqfF$fASOJr$PB@~wf-FF-75&f1gc z=JkRjMzWV$38547Dq4j%0FQ#Ool011E(q}JAI=>MN$anWw`pAnM72soKyUjH+YwsI z5<$*5>nme`;*9z^e^L#$^O~e%&#&{U`JSiAy2_ z(A1WxCEqu|_TNVC)Ud`|bpWq^ziB=%lDuSqj+?VqPo!BK2{ORPhjP5l16qMz-<5LV zGz{271DElY%m*;2kSm=3#l5G?loG!osu8NC3wn z>)#x~1Eqhh^UltCW)n>6HCrFuccF@}#}Ud1rRhpM^1jcoU}e^+^sg9zQhzf2`6kfm zO)yk`mr1(&7A*d!PD}ND%{tIqxk^q?B`I>QBOwNE7G1ydXzAHN$=u=~CT zack#RLiLQnWo z$TEz(!SIjzTqy@sO)#okuXIdJ%-BJPxt%GBK=$)?)QL>>K#S5uq>{4w0c9{2zQ$-; zdz@Vs3J2=&j}p^SP^^twr>8*~#GD|*_9ys$*yW=@hEDNzQ?LX$MWBlNrY#bc=Kyyb zxSUtl09p_Sx<)NX^077_gu? zmyDq48?u7VxJ>Ng2lU1%ra_F=#Dx5>RJa|9eG@{PWImQMC^^jrUWiNWHw*8Y-M~BE zd&g3;X9NaZlkew4R8Y8{sj+wk9@)IV%2p6i_#@$+LyS1`*;RnM_rcpEX^Ny=6-ZA{ z%G!{M)q=qTA5mmA*97N!DwI$AK`JEXF!$NBDPM)~qL}?Cdy~&T2i@EWy-UjSNFa4R z@gcmsp@*J)tv8K^c;JS6dSa`6pyRzi>X0woMg#gKVJq$YUG{=fl&kz3!skH6y5i5y z#n!C&;be&X^6(vx`Ul94>U*zoBs|EotCt>}+J zMJem0N952jWi@YZhAxEAn5 z@hdJf&#g%yj|_qdS6k=p)hi$g9;MaeAABpjt={PLF_2~-_auWx_I}XI_a=bWZ{)(X6Yl(e@0Ne@|?u(^-|2R8W}d&200FN&d^?wCNR4;N9C zxI^1Y^8s$TAveD&2r9qP!@j34Ko#a*y|==I@~PjlsdRG(E)*kEoRZv-DOb(-F-wvS zfYDK&+aWOdw_rRhCzn=?ih_?OV1br#N6pJFprQ#x2$WuemFb9Q(4-ftETnCRaZ?vS z;s?r|-0=I<0I`h-gdT)?_Kyi{l}|uBn=ZNv?xAB#YqTN% zFQ-M#vW9@40Kop%QS@;>Y)Gq8e2jeTJ?I3y5$Q>Xo1wSI0V-+<^zy8zUZMZ*op5?h zy8(U#0J99A+373{7{zy7&0LlQq=5O$TH5h-x4^D3L)^;A_o}I=z_%dBlekOC`NFeT zu=JESi{(_=vW?6F8yN!=pOXH}_aXFOb`=h1Y-Yeku-pU)iesl`fq1ipI72Nw`|kuiYS5F>3{E ze{&io@1EfsLO%TImo-?I9DVjqGxM$pO^exzw0^T?D&%fIv}o=JmP(Tw*-p&rRBm)P z-AsQL#B!Dtj1#)Mm(nprwo1|`Jmkhqp(TkeW+zHLI;eAC0AhNg)ZE_QE;&QSQz@Px zy0Y>{7cr{s8X>jl?gISmd`1&@4`PP>7v#Rz28EZa<8lh))6blJ-Xyt&#I+~XWtTVB zA_5QKd-9C#0^OW^LYl{ZI);5X@{GTlq@j(qyiz>YpKA3e&QB-4uJ`m}1gs8Sw_I$@ zZPO~GXD+YV<^Hv}3#wEqU<=l~$D>$yymb#h7L~#b!>gg*aHoKa66)9fF_<;<$CO=a z5l*kYexZ<)%2V6py6`sb;$8n-=U{Yo@#0%@dlW{-%DD$LDFK*PpWB@J289#sl?~o| z4d3A9c5wkFB8V z;d$Ocr&gO%MND5jrG!rcT%JiG>PIEY>1Ek(nt>JF7%`jdP zi2mskQGq@k4bM#t;umy970S3T625t+&Bf+@I7?Wbw$_dTgg3f11(AJ2L7+a9n_o8RXjO-e5OJTtbe7bARs@jN0}?X#ZO8YgkODS4Yv z(Qm7Gtl)g1cAUs=^@3Pfgzm!0zi#{aZWZr<-wqm>eeA|7ORtkkkSd9nc%R@!yUWBh zQ%q`qE;bMn*l)J;>k3AR1CKn7QgrHS{AP(}QlE|Sv!B4})yM5;!^54kK@>r`;_tq7 zbgjRY3ep==rkhyI6g+Fxv^CkPmf)wBaXTyipbLl`hA9`-f9eN^tw^^% z(@*HV8D}3T<8T`P!?F)+cy69DDK>(mUD(#>a4JzV+h=J!Si5G#K?XMCY8Uz{)=Yq- zSAo&!zF7S1rIG2}^)kF1mnEFQ+RD9&mV^Vm*M*w4>+@Bnv&_9_f=s{=zIqw&>2QGb zY(;7wO+T?%MCd#Nta8H@x;7jtn>3wf?t%qL^Yut)NfxXe^p71d8BcA-rHfhv?-eq-gWr_w`Gce z-P>nk@T6u@ykvsr`ElGWn zG}%nxO!N-x3&y|gszspnE*C2m6)>3CUeMpTd0vnNet%50VFPPF=_DnLAf-xU>VT>( zR7o5;n*AIfhOM*TJy2;t&Dm|FgfS*H#2`V5mYE>3d~?65ZZU^V*Uu8iUZ$=iu)OSG zK*a>!>46*X`D3P& z9S?!!7SXqMIA6YoN);o-TilU_Jo%WPb!?_ew9uD7E<>0<_VyW>5i9q(n|b?wo z%JcP4cZH^hiE@K1L|#kvSI8kXHArEZweI=@4snT3$4)C}ren}oFl5Hj*xM%ZNqdyt~D_%`6ZcJG+gjthPuG39b z{2^b*F@00?b5^w+eyM9xf8o*l0-oP1!q}<>IW}m3|V$q%*XNJhu~R&j?ZcrBg=Q zqd-#mzPMw9OQZeg;+bYO#FhQwO_YyHC#3=Y?E+?BXz%hnX<(Gc;3dUR!ozvs-)5n) zKa?=pKAEf0-P3B#Oa4|~rO)){_soF@Ek*LmbRLITKxbu}e%Q01o84$1x2eSw42y>9 zm$j^(IKAa2L|8aU$(66{$b%$P!c-^{s0-pyi>1zc7yrPSO8L_$6?F>-L^*B8D^sY6 z)CP^CEo4vGkED&ka_jH+j;as;UH!6#x{H(eXFg|v&NAHYl94jc(p^$3ch36y+O~F% zG@|Hl$(M(xaN)Ct9Iw#XrW;ZaZGBc$oDZf?O|Fo z+9McnS2sgami}o|;1g=v^DVo3IR49F_0Zc*q-K}olZ-^{AJtDsD;3)3Sd2AX9#*&q z+;z;5tk>Gf720=!Ce^)r+W~hyGo-YL=Jq_FOVb|Ig{24X4PGYJ5M9G-8>*#`Dab&y(yw51 zzl{`+EGkjY;-Zbo{!_48p3;tgVgJ|s>hFSjhB!KUyt}`4FR_9-@4J11hOIpEEuMeu z$LN3a6!?ciU$ve7w&jdJ?+ozO)2A}N_?{x8C*zm+1QGexV%%h7# zS>A8`W9Qd{oir02qTMtfe~K5w^wWG3E?(BSb=kh2j^&_RqXdC!t>84Mm z+Jwo|O?wtoL=YXVetk5edJ(Gsm>UzMeC2cCk11+c$wGkcAA!l;Crwr!>d+Rz(u_8UM)l_n_$I#0lr1%YV>;Yavu`ycx}rSfmu7{8C}qh^K%KF} zQbtnn(_?3QEEo@l+fXjz*vP&@ZT)Q@x3kvgH-mULOmt`kKQ&Hfq-&BgL5e3+t2L4v3;|fZzxFp8^P1*MTy>%2@kJDuQ@qSEl>Q>atb-mG(rhF6YUeZChzmW;o8#oKIi%kbHL zU-`yF9i6bSJg^EQPj5WtEgn)8&f9pxk7S2)agPPs?ANu#Mwh|VUFC)WtbEi+Z#^rO zov#F43*Sb^aPqQ;GE^~rge5(6vqF|_o5vtUJ8>)8^k8;Aa1Akj%HErHBYnV(hxC<4_M-l$*T&en-4?rd%kr@jO-fcF%`GI-szXcn;rj0 z8=Haklm4tqG{MJD%=62QRp$y0Q^l{a+IHVDVx-Gj{W!N?AcliAPn&gU(>C1`ncgZ} z0sfD5w@cBkGv4w5zRtIlic!Z8-meeaf5gP%tC zR-jOkx|Hhx3E8=M=&V`Bucle4UARHv@?=%`4hg$; z@M=t_+*1^I?0l_oz^4-n}v07 zDN8@f&Gl?72m@sq=-;1D8|+p*u&>boe#0RaeRY;glip=klgtxY@xUBtoS33(p}wrr zEW3A_-hTS!cA9R=FL7IfX``JzqK@!(Us3r$y+-41F*@_OUK=^RlDi%GkX7 zYcq8!epy0^-vRz~W%YPCi}}&}pXIx>a<%r+h6rX%B(FM7?_pXu#w+Ouc+G8TboNu; zvj5myku3@G^FEXY(i z!$M6g5T|&R|Cf=7j@_#1OXnWr)Gy!Zsm_D9X8upjxtZ1m6o($3ji4Qu9}6bm!={th zE0Nd)3~kE&|Ve6t`nTaJAPOhV1l>d@{WKX!#2uejuNmaXr|@e~rJMEmcy}cGXf! z!qXS(FA@AZr3~2jmt|;ULdahEJkF~PbeMqXLc#3#NbwV1V)CIMx6BV^%$B`$ zFesRk`|f#lWSXE%m8vx@R&gg$!u{ve+d9M}d&A*+HO+h1)a7*vo4nxlhV8J=k2|E| zEQsN}OGw=BC2TU9yQ6OeQHaUvC3RO}!e5iW2)9*Ex*BL2mJ&8<`Ax1@)60QHT;;oi zmNcB;&+xwTTL@+Qvidhh2v2G?Q?m_$H&>eXwIGPBfNOaaB*15-e}w>sTaE1P*xi`tt8G_aO zHY9cQfh(2LMA{C60!k^*B@DQv4X3ZSAOPS+k#DtYxJ3d{r&mA6j-w%jWA1&S9R&OZ zz&RBV2v>YTpC=Sl)6Lr3l<9qC-xGNq-tm6GPzR!@1ue>CP`JQOyoLoAzY}}B7XSsm zX^veV2+I0jNH5)NOcu(GH!* z++MMSmNFH{%OLb7$odW*ggRq=L@kFJsImKX^&u1|dwTt)PXUbsDE$_VE+wHYI@1vH zozK86xTppfsh~D5b^roF0ji?IW~V0rwt1*F?Z*Om--P#X^4AuLpkb$Bc>hgpv|dGa z2iqD4!{h!lmTOfhB?vl)!`DC5fe7M6KJ?sZ!H3-LZ96afpT_Smwnib1NA=u;{?nLJ z;)V?hFqn%do-PR8+QF%300lHwTUJJGp#o@Fmh;}XRM4Lfv#q$6wq+pQrCoKXg9~)1 z&7rm;fNKqqk*JRG=!qTA=hc8;vr7ehd#&CRGQ_Hsp{^|-yJ133= z#f3Kewp_DQ5D2?$_2|66gFu<4+PV}Ax)2$_hpCd&()1t9JMY0)Lf!LcYZpPLhHsTQ zA_ztGYpu{Dhb#@2Y>;&S25}~KwMP6P7RLPEF0DNj2sT-{2>|Bu`{IN69=YrbhmMN+yxB;!Ckr%~3D{eNfj<112VWrAUX8`d+Bi85jCLb|{h34uiG)6-BO*R*d5 z$wF|>G=a2J4AA|JbrCR@JrESzQ6`XoaL6Ct!>BSU?Gef&(Mbt$BLMP2{lhRJ;gv)x zC5Tqv?A0@um`;U`e;>0QTMnwqTeAVWD=m8n>!c-KvzaZrEy!CZf354LaA3S)c1)rfp_G z{HsNAT=Mu&$B8a0l}_Y>qQ7mZ0Q0a%(lnQ-%pvr-O$DioI$@K(I7>Z zoRD}a6%}kZ&{sVhmXe~|d^2^_y(Q>&0r5ZDa4!cTqSW*senxaKhwN$jJ#i|BXcy8} zqZIf6oC2V|2nyUBeS#`5r$&M(R3Fs$al+=wML^OA<^GBI!3Mx9K<*|WSmT9?w_<`> z2Sn(gg(n~<$2_AtF7_S3 zO}I=(wq+p=x?6sgfn_wKY15!6M8%~fXqB$s8Is!qLsV|kk^CJufMM4kWNKgUbh8L;h%V;q}Ne$0W_5WOs zR*QKB6F*qc4Q>{z;q&35D{uJ1BBDs42>Wi;iWntMF|O$G5ulrO^!Vkoe*AZfrfVr6 z^!o>rilbH-mZ}tRw=5a0;JcgG;9^m!I1WjmH5EQi6x3D8>Wy9KmwKw1F0g3eJ-XU_ z=+7^0h1T*OX%#Pgsq6vJjWkn9DxkA#5Fz~Me;fFS%eUOXOCg9d)1HyE+y(;X3*e*6 zYVrR|BaJJZ*3f|}CVXsz;_b5Tk`uZ{@HmZL0iSdkdgI@~J<_&-<6us|XC~re$Q^#)39pYMReNOv=0N{XGLHZ6Qa%;fI2S z(atmf$+jLWm~e**#S-|z{Lo(VXDR8+KjOwIeQzXGb`AtW<)G>s%5Z!D@lJdSuaEPf zzSxi2|CpWULpb9I{GfV9X+h&8P-o})$uPuNwevQV76o=^TFq}pgi>>m7C+fSCrFIE zFwKn3%>S2cyw@7sp$Sv|i4{PN2S^G`d;f?rJrk*;5LaY+6z|=CH;XsYpAM=&Y9i-) zV5zxyQ%Q)+096jcfjn=}@8$ejIrL`H2-W?+f8W8}eg^C_(6{ze>EHqC$De7A5Tpl)M!L6; z!}=PWz}0-FGfpP~dY4fMW5*Y2ywbc3hfFnCveu%)1z!PfTXmMsXuu2`j(WxD9LR48 z9OSPcH?*&z%Kv98%DxK;#7FtlyYgaNh8QB;{6xq9KaXUtZAdf~s+6L8=DHVnpjtHc zX(|7xD+Ip50Ko#d&)#(eQq9l8LBEUc$u3E%|EuIlj28?@fHtD@2Fpp>kP?!fTd`5& zP^g>ZmfAq>5G?)_r^W%%CX%>X0&BgHz+1s}q-UF$@`xAa?IM5=9>eAvEKZ0fG~ClX zPeBgV?Dm)jl79rSKMfp9Wx$s?5HGBKq2UB#H?5+#d2s@KqbH@wZpG678QshE8y{lP z=nR{q|1S|@xhh& zFM(y``AC-b{(A&pp3Q;>elhi>h~Kj0C2$-Xld|SpmC!n_lv70i%(mOxl>F}o^BHt< z{{IFG8&6e0s%uMJ7PScH9sX`8Q&w+y!Yidn5$~?m%eD(eD(A!Y7>eaMS9hvk_xUC6 zxC}Z~97OMB15H-90T#`E=EDJYrqS+L+c)?q%_n}aSQF>G1TL}FsxMvcqu?`cV^mp_ zukoF_a|^8f?=k@1xv`x4)w`scp}Q#VjNH{wfU+LNty|+<;bi95o6eB4QgR2jER=Tc zj6lLLCjX=1ru)#g9A&Uh@1grtde$?yk@+#aj-}(mQ$KejBEOC`S$HkJ8vc&AZCJzHs#C*!T>5?*E zt!e`9!|)rC&y) z7u>t^WZI?ruu}8qD$ylxS#@+4o+|L)i0yGXx{AL$AI@WteXZ{POl3)LWz)vd)%@K# z>{{Y&L}|;D62^*FIr@qNgs<&;Q&R?xuAJ}ARgEu@QPthWi?KL0^;B-)-+qpM-r2K+ zo!`@uD1E1@)TWo4fS?Z3w&u-^T(0gL{b3~wf3!M9_Z6F_`I)+<@PmfA4XfL`_ELUn zS4@U}ms=7}?{yz)@dwwPztVrqGR&vctTK))ca{TZUw=WNPLw+I)%GOYK>t)Q-qJdN zlSyz3kgfpH4cvm9{5Nc^C?PXsT3hu6EU&sR05eAwZS#DPfbm_@o@^Vez^GC4p^o?0PmGFPRwuUA zsj~#=667pU9WzhHekg5w*NCO(`W#TDkl>TNVi&NY60XB(JI<;$2ofp0=H`vP!^oXL zq~dVH#qudpZdyuwkB5-_`&$#d^|@4&Fv)cAU8-qK-2g_e!p=I5;Zth(>O}f7r?_}x zaqke5VNAahBFgsyNK9nbXAcRi+}J0Y0mL&cyOr>tVl<2N1aH|`ET3~@NBdp)oaw%T zgqy5xzjYJfiv3upXV73co}@MnKx>oQp?xybF|^peomBTMMk=~z;4=?g zflLX@gW869LZ`YhlSSYkn0X5o;wSLmr?SU#fAcH(ty50I7Ux?v72C~`7tP=NrgDXr#A z%oowj$*Ll5#yCGoM2&9KR7Khq$EYv`oh_3!Mb{%RB8|3xr5O*?kSt|cU<_h;am@fr z)b;0E=}@Yc$V|?%<7`eaFUyDr%lf_8?U6_*?67`IQWC6e7hO<$BzyTn zkvu)so37w`crF@4Rd~@pUy3&EB89djxOG$_A#vm~g8~pcBod}ZU+I$rVkIE9j?-hR z8o3GD`ZC+4eMNJc3Q)0BUNaoamFklWNvD=-rzxg8nl9B2Qz6H&-Jf){tE>!#&28GZ z!)Nz2=}WmIT{}(Ex|dcpdNDymhETj{@P&oocPGuX{v%?YnE4CTNBOhVt-M9z@uQ}FXt4w%__+&p z)6GMs?g!gLn|UZa{4!XSC}Ss+@3VA_|LjgAjD<>&L==WPhg!H7T&jBy3CZoXj^~Xf zAy~B2;-~Y7l=^#C)xD@umN)0nKUMlb!Jp16(ju+i>u)-}F_F;En9A3#$;0IurY3lz z;+U~j`}5KMQ|+(4ygd$CIg~Brv4cY%XBh`e}mG^kxa^ zSN4x4Mg?aM2dMiGD}Q2obha4Am42ve>RT!`b9sg(`g@gN|G;iJGrLekDP&Erk+!$< z&sn_P)7fGiSDKJNoLY8)#xW-RzQi1*{#^U}Xn*TkSlhdO4is{|KjP_ z9BlF~+PoXmvGvtgYg=Zle5GqpTeAr<*ooOhVn10z>J%4l-*kSFInIVAdRgNZV1YK{ zOqQAPpZ)J^eS)|8a4oIZP&+~dubae<|DC5%e{X`N%@)uYy*SZm4!J+t$={LJ)|Oy( z`bdb}T2>zN)IP)GpQIi)6kzv$Z%$q)L_B{K?5Q`&ndBE2R-On8FhhG^QZIXPMeY-= zPM;N6yP(KIp?vwNws)Rv$R6=^N1?tJC7QFlhgBA!XovgopaUl3f~H?VgCo+`@p#4- zN;H>m*lw^`s@2{58{&%XwLRily}F?$8=N`G?#k`KgMBAP-E_XbyZgb&+>}%)5dgS}=%vQTTgk=|i~NF+C9PYB zL>I>sRQjb22S;12IW<5h^NRL*UcmT1x&w*+5Vrc7F#QQE6;B^Y$aeW=ftRb?DY1z- ze&rQfIgsB8+IJS>*y>vVjSkamPdov?$IQ2|S6Giv!I1*`Se*o1LZR$Cv>2K(K82i@ zr5-9?i12yfW{f z_%lUfH@sME67d%_r>3qZbzau`_ERJKUDGRN^M7YasIDGzyFH#XwnaM?xnkFRws8hC znpB)t@Ak&g`huU=E?O4a8U1n^KfR|O18C$>?@fk>)*VQwv?;pCx-%MvQQAEU784@~iQTKiKVELVki$EyoZUiL-L{AK2#2}*9Yz@1ntYGvj|azR2}tZ@ z56xK*OhGr+{YjcUDXgLwna64W_~YpGpBwiZ>g+6SA5j}Z{7aaKL zzn{lh9C^Um#1Y-e1Tv@p!of;Ly&DQ(p%$XiW=vL_KIF8t83a_SykM5jfZ`&Pm#Rp9c9yxje8&Fs$*Bb7@lk!U&l1LS9~;@dQ>2|o zpuBlm^|FM|(z*e)!Ay`KZAlO)1J#p=1?gTfVwEVY1QXNh1y`=HpUn$?Z^KR-EW_V> z9bPa8TE{s1K3qKN!dTN@8kFl%t4pk>qMnZq+F2)1i{$+7XGd#Nx{R2nx%U4cF|$|Q zKqmgIO$yd_;F3bTIzVJ#uFiwgiA-A}e<$APG=fO8NLar_cTI`eiR@Rq%HhLs^}0m1 zZ}C`gXhMH%jBkH;oGDI*3i)w-N#v^46f!{;Z__jYmj3=(9scpl%f z;dnFOuivw8|2(V>rfC74sZK`oTjiMg%rCx;ofny*!q>=V2wZLD0!XhKyC5!Z5IM> zGJA)DZ2#)ps6cHKgGNJqRDs~+QnpsVN@$9jXLe{x((9Nl=2HWnjk!sOQR5lq@9PLb z$1yk=B9y8KSai9WHi5L@y4ddklKh4fRe}a!imehOp~>^^1jB zG)|isIox%=5*Zu#>x)#TOh$YTxc7Z+%3h2JEO$#{_OpuF1ZnRuB1r!dh1~evB9^9X zlE-haAYn?yt6RhuMgx1bR<1k|AF{WT+Npz*gH$=8F|Of^n&G4t3GJ0Px%Z^PVk70Koj$83``tS zS}g@GoFt~^2c=4dm7L@<|C?P5g!55$`MTqV2by9%#xbc$1m%j04O;xi#gLEN`x_GIq@Y4Asyv4^;xOgb<^jJoWUEWKl9&UV`?)IHM3-ETZYtO zB844adDNkJJ zgikAamfZSvKs-QaI2GF|t<8=?{WB zmG5tpS^D@al|q%GamijLWbc*QrdZJg)x) zUJiwk>W|Q4GAeUzxw5VT55HClRv4wVF}Cq{z)u>{D@)u(ila*`B`d9)mGcljACGk> z(MyrweW*v>1>i7rMvsp+4PvDV5sSB&t3zYzCBa=)o6)EB=Ut;zc(@N-@dA2;VO>=l z(axtD_gWaf@Rs_Rt1i)R?~-#5->s;W&F8!nT?**3OllGl{nQTg(b=-Fn$K*hYV%h@ zLBXzS&mJ$I1KJ5Y(hpFGTEAC8t~osVo`T(W{uG$EGZ4Yjfh{xUp6#HfmKJP77Yi(5 zY~6r4lOTG7j8^omUyRo>rc#Xb<@nzMsT7flmly2q-*ENwePwfaI3Hd&_=&>7KUKM( z8L6UR#GzoM6O#;5x^U*#1wRZeHd}gZY__qZeIig%BPc&eiDMLj8ZkydIoJXbr z2^sBcX?-LekB`3Wij6{x0PpY!c{1MO6&xlV>+@ZVI6s_%<;aTDrdxI+`%#sb$Q_gh z?w|YnJrVpLtTPuFuA}z~w$up6Cev%nRf>P4{6UzqjNb|be-eXu?^Krs)9sM?Yl<2X z|D2l+b`4ftw|?P?OnuaYj_p+*yleO`LTzn3t1s^k5=}N);o4I0fAxx0a%#;MI2YYf z$>b@?Ak1^;}o}+?mtNR*BuXu6e`kiBh82m`hZtYFaGxRge?N{GpFYbc!m}SZfg#xF+oimFJNxH zUiAvSi`q>j9U2gDK?FvG0VA{&{_p?`TiA1V<^S+iUnU}g_Zxgo;zWbBN<@_Plulfu z-QN)p`Pqr%cc)--&8_tBLhl5yHKI_lxi(ONX5vn#;3oLqgC3#po_bf6YR@!-#?HkV zTdZX>ZV*weQ0m>prkB2N`=u@1JZV0Gm22oQk~Vi4eksLSvt7tg$ERV*^kyefy7?kY zR6O%V@Li3Sa=X+Ao{E#tvg0*ia>e!>lpvKhG%bSld04{-JEDb^$pDLBs-^k1+~e{*|J(*=jS6ow1HkUImZyC~9}^tn+;j$7MAS$NP%tXL-O+TTHe7 z0E~vGn1ZS|Jr?#&*6D$kB4)f#(FF_a2p@PkrECb&81g)h{VU$9RtEu z6O7*)Fv>FAWtEb`7w5y$=I5W6?niQ6_Rc-4as=@sYYp5=^CsO#6OtcE#V*ab_1)6V z7lf{U^H+Ve)Em_=#Vs%A`vNB#v%d8@5~k#0sXB&^!oT#@ueWTugLmB)Ylyl7_He^I z3BL$zXPJ7CQe|m!d=dYwn8FQnB>ak--Lkf*C}BzXMN!|eG>(+&3-m@U-lgs!*TIS3 zs{9qgn8Zhj#`GTfmbQcZQT%q1c#yt?7lWYutciH{>w$s?8)wQ60yxHP@u(bsf*FJR zT=w%+iJOo!`JIU|6>qJPvk6vmRLv`9I}jxtSHO7{8^1pF3mA57a5dT7`L zpuj89se=dar=>fxzM7LOxSSQ=d>0whdHppg;kJYQMNiOU35?4ayd_)6lW+^9Pvl{f z}Cq#-u&>pY!G8Be>l>^ScXi|gK^U}pd7)a@9uhtusU=aPT5E6v4j zQ48zytv$(gzF`ORdqB!!BO`w;rh^dg;$+mDFPO`nGrCRAO*L9h3m@7T<}JN_5sv^C zP>x&&O=9DVsKFGI#NvFdf(OP@(JDfQUX^HAmO`B-A=&znZ@<7@^~OwWqaM{d^JG)LpZz^Fqn8rxV64wK(s zi0HM;&9GnK7%E(@=%oNG-GZTMb=4_jtn0JjpL3xcsqUWH4$2O44WVR7vuB%EbpgLs za*L#w@hj)F=bxjs4a{?PaF4n8mk>#8N7K%nHq!9jjfZnQiwwavS26gNj;Yi-vbSMn z>AlH1({ah#xwEwY39X!>+rvARkhpGgmWhE#nM!nm<>{n zubP?GA}Q%sljtt@FY>g%Q*>6f(WnbjRd3Hje>o|bee5tfdaUn!MADpiSRxWtC!t!= zGH;vLH9_>+>7u9e{EiK49zW~wGB%VUciBc6x8nUatmxmHbauY^8${>bF#uTYkg%iW zn+?LfR~Mh#=YvAJR`g!)&{j;%&o2&Z9Z|X?Lt7d@&h6HnAVf7SPqn@ugs3hN*M0?p zyNf&%kD@@Z^~9T*abOIyz1r4$zagI}_W2yA$d=VhZtHd!fB89D>*HHI^TsyMax0*1 z#9`Rp-ZpY+i|YrhtnGOWfG>Z0#jBqh7YQQGYxoOwC8oEyzL$^O7{1WWT6^mELx=BBq2JUxj)#6D8YOs}TV*CTtGC`ZyoB?d%G?q7}1_k%^k;N!Tm%PeSdFE4Y zvU&aLy=PsuPn9}d91n-A7l*NvoQpo#FO1+&OJo1}DRSnubDB3rdL9ESdgfKRkGTGB zhZw8-Q?d-=Bl(o-~P&}$b!InR@&AaOhVOJZ6Yy~9?8;zLC6ysrs z(O;F%UjD4(ca#>W-;U(Q^?;eL+J3(T9wDZz7S>J>7?@A_4bB4e|#Ha$wFl_6aD zc=_HmchQ{MYl7M(dF>zfYUV?T?cr{%xVstrwe zM|<@lKUvgU<7KTt`!(B4E`Ql$)*{E>{MjX}w>}Yn7+a6NPBX8F<>$TblNuA0jtj1N zhRT|hbmqWqGqP+PiJNC2@>%Qyhg8FIU}^zyKh>cTfcwUI-%hkO$#uO^|Oda z;NyIs5kvmBzW93$%{N2Efd`oJEc0{E53NhXXTT!<>px=rED9e#9Er$nf2P}KpYV_2 zOOd%e-!7mLVyZp-dytknoh6{rI5i6!|$TFS7V?fl}_f@L)G zO*?kJZTXt8@g@!l!n5)@l~i1I33-T8hgWKf8fk%JjIeqx>I+i~0Esl6+Y`cF3`zA)_@$x2tEoUC?SjlI?uv%d!k8p^0 z>#mzMi?2zEh$>gu4#ie1Ymz4!+uqPJWhVW^J}61X<0)dS&YG)nnj(^W8gfo&B8FkT z87JW~l@Qf597eK5C3|4~k%!y$Jy7!z2?j8>yxfZ`?0JNVu#;VYKkhFTeECh+rju2_ zr6e_wbVw^ZXHQKIGmBR)F=tIp?)yKUt}>vC?`hLWD~*&ABCXPm(h`bvcXxLQ2#9ny zND0#29nvM;-QE4}uD}2LZ9Her%rkxD-n~0hI3zi1L`&`FHLd7Z)txA;hd{g5yYwRH z*a`zy$92^jpW#X{Y{kN3(;*>u@~L>3iGpQG52wjZsejt;geb0mjK+x@(NjU6Lp{SJ z#1a(X4Tc#JkD&&Rt&t+OM&-R408OY5HK zM-R-I_oLVvaZ8&CCSo5Y?MY?$?0=FnF^*I+JCDUW_E!i`a<8o@&G?LA&s&w|E{=t! zzB*KOO&EDcoIHD0eI7cOTC6Owykjwm#UsVaC*{R3^4u%u>Fz*9zSU&&l(8b- zbexHT)--j&+uz^!dVsIWt$hrUF}a$>eB#w?ORA+c#iKbDrWEVeW?c-+7kFN+dr4%; zoQ`aB{pAv;ofPrxMd*Hh(<|inb(nnO?LyR5EOQ)!Sfla^I^^wzaAz+V%M`+NYIwZK zvd(>Oa)~UTym5JbHfC~1?OMnx{D%EXOJn$Op^%HkUrzBP zGu>p(?XhFQ($spA#*l9_R?_<#B9yt%%S!s?!}bkyrG{JDwF}qqer{~e`qI?UtJ@N; zb{F2kh^V3=*>5`GE#uB3yZGR2u9nu)p$3V~9Fv*v;QW@0OWGO&9;w=(l2~e+@8UHC zpR>Aqj{c#G+DCsPqNS4|VowiTV^ZxK0-xQo&WPjv_zomqK7)6Ih(aFf0bP(M)_o=k zuX*V06Anrr;@UHHp*#L=qJxm3xoYTPu~wl>v?cID5yH{Q0Y15g^gt{-OAg&`2;8uK zK$n{Qq2#+{5LuKPXR1CRRr=~r%`+V6L9l^)vO-8vf#M`OxVQXmh=?Nuyke+X|Fz_Y zt{Bq=A1FW~4%fpDg(Xd>Ex{d+k}Co~mwK zZ#3E@RXL8lvB-(c7JRdxxIcTk%|!bVTA;i!3SS?S-iDd^$U~2k@6xJJ#cwHjW0&r@ zY=%BqF`hb4tk!^lnxFF$u5LjI#ib%@_KiFzV_bXq7$PUak*pZriRyYYH{XHH_{%Ub zl>~!}YY1EVR@<7ho%A!qNRz4rd0=|PL6C0HMV?)C(wedQ%}o6-$GD!6nzPDDc1@$6 zk#LUzs%%E_{EJDG8`_8GJGtg*>*DRm{K5X`DkzaX6nbn5uM0&4*?;p!w7;;GUO{rX97Ee+$DMX7OM^! zpI>XvRdV7w1#~);n$Kie7$^EsDa=*Y)YtE>9MmyjB7SE+V5;_SoF&O~w~cO>h-Ov`i5j+;ZH$S;Z-zrx0^uZ;fTg|TVHLvL}O z>|XDOuUUqZQa!Ev?gHba?wu{eRhNi-)Pks7TISux>rKPdGB=*57LP3Mk5*Em*LAT0 z+h7gL&RmRdLH2@;simsw{3Zce+!w7Rr%~&d3yhVzHwNbV`3CH0Bn*|!qif?A3%ZHM zma}u_o%s=ojs}^=D{YF{JqnAlOJ>gXWE(~@<&YnIP$Ip$u-D*cy;CAhtZ-!~b(wwJ=sBK&^2=yU);;Cj5wI-f%AOLQ zZ6|t{FH|`$`8)2n!FyZjwobN4#>9*WQg+fs`!6p&Lf5{(1%Auq{&-VB#q=BbquB~# zb6UXhqe2vFwz|&5>UFI>od6L*93@j+vssU=;-jX#+SpW0FM8mh@%f>D%lQYc>lzoP zZrr?LCxUW|wUrM=#pfQDm*qE?AGX9EQ)rr1?%iHm?}vqYnxyv8itNy{yUr*wF|FO$ z-ed|p{Ptq@^EBswNbTBLMDsCIYW&4{sy;~jMeC%r58uw_<)qSL5puU0AmVIw?hg}l z!9!!9dTnG4c2RhZ%v+nhP|>__#NX>kJ>OG?;g8d*_m4TLGl(0k&5eS|15T)egumSh zC|?U;B*+v+xcj5>O)jux$t1ka3-Mw)(3AbMcGT_Xg@G;|E?)CNe1)Q~!$3T8!*6`6 zZh1n$VUC(^Tz3?!>X)u7g4jwt=keUTY?*{3n#g6Fsr1Msb-tu;9}#9krjN&|lsndv zg9U3fGe*VhF1l4-4`MDnHaAFR$oFLqG%BfdUQ}I+m{uL;W<3!~k`w6ne=xfB3=DZw zmAg;VyX{rgQLf>aQCU}iOe$D8Lh`(=|KfJ;VzRK99k+sr1y>6uAH#n?yS@ME?r#jl z!oK~eJlOn@jbDU@RYlTu^Oa3ApNDfAwodTVXFg9I@L-tgc~oYk-)ml{(}UukcJyC# z@1}Q8C=sL1bbPZ&gOw*noo$cFHp4aTxneP2A6Wc8bTA^cQ-4!J z|Ek^klHAMi>Mh@TL5^B&H0MN4q^93bPw0zlP7uje^&h&R zCGM*wQhV-|3H74$8&+A_=o@U4|6rZ1<}5q!^WfI4vNFN!obV6W{-6-az&L;?Fuu<^ zWGCJ+kv*WAcDxLe=jnNC%zlfE%Y2Yp{U);&K0hqPIMcA)`nz-(YW5f4ZOrPjhVsGb66}jZ`#?3VByH?ICU=>e{(b9&f1S+`6jBV70&kzIZnE5em>Kt>YvbP=) z{@L`q?2Do0&JIzxcegS{URK9`UT86N$;D^s$47Nm)Toy?xSw1%vz#m(GpOZ$Dn3vN z+fit*1X3}~J^eXp+AhWBTHsP~ulcfFEU4>fhv0kpoq8)><%hCI>7UkJ7F+%bzW3Cq z7AJcP#^ENFS|@nf#dXwUQv+t~5>&ARW*+lDg&(L;45DR{;yDQkEu~%;9J)n& z%{S*Bdc2&S`s48uJG(}6Xammj0a2&U{o;YOMWgwJ6v6j7!l6N7_YgQ8?%B;1amQCH z+Qfb)=_{iIEK&u;?(gHjxpvo=uq;o=72AuYmV(5hh0#J8%d_2{$-i)q^HNdhJ*5S| zyR%H(MC!^avNN8f)2qB+Y2svMPA33}JFYjx>F@wCTxW+QxLEp?YU9*b#M@F2Q6jB# zND0pM2Oib8?6@2l?qEEsh(fDDq_ZgW9Lf*AU&u4$uae#ox{t>F^`bkGZ##PV=a(T7 zW}<_%&_y9-9k+Wwt*rAaH(ZP@1;x^a6Zdhf;lcu4mn8=_+~Hz?sMxL|8!j!-HA!06 z!xS7U`<`tu)hFd$WPsOabxZCFe-o>~5aMA~3(pGas@Z`kW>4VzZ_~Y>(BmQG+v@ z*T%!E<+s_>-37dMCRYW~H|Ks@UOqCUEbz+heb9@_MQVxoJonlwt$raA4e>#V%Xay* z0uyds3J=3;nwymTcK;96wE>6*hu#C!HJ`UG9!t_m&Sn)-(fn&f0*MV=eK6gTFot!g4(xeMv_)?_!=;hJe$+xVyQoyHh{~V=TmRIJ~bvHE9I=N%D zrXisr-fxwGEO$W6$}Z@bilpF+XVtNYPUuW)o5bw7897MgxfLFxfdrS*vMpKfOhzwB zDYls1R3@FleqalcoU=Gx@60ow(;=f(Dv*eJ+5LK@cGJ)l`FFJBy!mZ%rele>Mc*d*3qtOhj>a@V$sy#fuG))4b=pWgOHRL%(E}*y zXUVf;PPj7o-M}lVds8%z*;Pm`aa(QruiZHK7vI*CB}N$zEroa;Ph%ntB<7#;U8y7c zZsd$T47%s|j>;wF+HancpeODKEyOOB0|X9DAN>^xvaexY`-(V!duuw8lKmF`piSsB z8S0s?YA?eonORLxb{W-mA3UFMT1RF4}?D4lf5W6R?-s*}flQ3y3k)J^ud0;?^T{ zH(EOFA*$OQO?_~Dy{{yyn;T7SIk_p0BC5L?O&zLm=jk0WMQsptDl(+mBEFYc)}ePN z-~o4rD(1ejP@P&22!DnO+i^LzMh?4$2N#G;VAYH;Opoxi+WLMIOR)H< z;NAMT7>!`DbsLT5#Dj(xxYUrlbqnXM`O=%SrRMGoT2Rg;25(f)EGJh-)~(8z}g9vk9~KjlbQ zaz>4(Rex8E1~O^#ULP8R9=to~Z;1mPSF=}-=K)3FK*}H%4)oiVQ)L;fs|cO@$_ClD zMR4!9@e7|TEVzd~&`1suKNZA;peOP-3av?6MIgT8m9}2;uDe->VJ_!z*b>(xs;U9pqChOmPj!m7h%1 zil{*Y$T*w7h=2w(GrCqIVOXxusoG0_yLKZaBG!S8cE-)*!nui1&);csX zf&vz1R#(∋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

*|y7&{8R?>6?;6jSB@+;cJYMACRSEe?$K-gCM1 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 diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_20_0.json b/core/src/main/resources/bedrock/runtime_item_states.1_20_0.json deleted file mode 100644 index 8aa2d1b0a..000000000 --- a/core/src/main/resources/bedrock/runtime_item_states.1_20_0.json +++ /dev/null @@ -1,5186 +0,0 @@ -[ - { - "name": "minecraft:acacia_boat", - "id": 381 - }, - { - "name": "minecraft:acacia_button", - "id": -140 - }, - { - "name": "minecraft:acacia_chest_boat", - "id": 649 - }, - { - "name": "minecraft:acacia_door", - "id": 563 - }, - { - "name": "minecraft:acacia_fence", - "id": -575 - }, - { - "name": "minecraft:acacia_fence_gate", - "id": 187 - }, - { - "name": "minecraft:acacia_hanging_sign", - "id": -504 - }, - { - "name": "minecraft:acacia_log", - "id": 162 - }, - { - "name": "minecraft:acacia_pressure_plate", - "id": -150 - }, - { - "name": "minecraft:acacia_sign", - "id": 586 - }, - { - "name": "minecraft:acacia_stairs", - "id": 163 - }, - { - "name": "minecraft:acacia_standing_sign", - "id": -190 - }, - { - "name": "minecraft:acacia_trapdoor", - "id": -145 - }, - { - "name": "minecraft:acacia_wall_sign", - "id": -191 - }, - { - "name": "minecraft:activator_rail", - "id": 126 - }, - { - "name": "minecraft:agent_spawn_egg", - "id": 489 - }, - { - "name": "minecraft:air", - "id": -158 - }, - { - "name": "minecraft:allay_spawn_egg", - "id": 638 - }, - { - "name": "minecraft:allow", - "id": 210 - }, - { - "name": "minecraft:amethyst_block", - "id": -327 - }, - { - "name": "minecraft:amethyst_cluster", - "id": -329 - }, - { - "name": "minecraft:amethyst_shard", - "id": 631 - }, - { - "name": "minecraft:ancient_debris", - "id": -271 - }, - { - "name": "minecraft:andesite_stairs", - "id": -171 - }, - { - "name": "minecraft:angler_pottery_sherd", - "id": 663 - }, - { - "name": "minecraft:anvil", - "id": 145 - }, - { - "name": "minecraft:apple", - "id": 257 - }, - { - "name": "minecraft:archer_pottery_sherd", - "id": 664 - }, - { - "name": "minecraft:armor_stand", - "id": 559 - }, - { - "name": "minecraft:arms_up_pottery_sherd", - "id": 665 - }, - { - "name": "minecraft:arrow", - "id": 303 - }, - { - "name": "minecraft:axolotl_bucket", - "id": 371 - }, - { - "name": "minecraft:axolotl_spawn_egg", - "id": 503 - }, - { - "name": "minecraft:azalea", - "id": -337 - }, - { - "name": "minecraft:azalea_leaves", - "id": -324 - }, - { - "name": "minecraft:azalea_leaves_flowered", - "id": -325 - }, - { - "name": "minecraft:baked_potato", - "id": 281 - }, - { - "name": "minecraft:balloon", - "id": 605 - }, - { - "name": "minecraft:bamboo", - "id": -163 - }, - { - "name": "minecraft:bamboo_block", - "id": -527 - }, - { - "name": "minecraft:bamboo_button", - "id": -511 - }, - { - "name": "minecraft:bamboo_chest_raft", - "id": 661 - }, - { - "name": "minecraft:bamboo_door", - "id": -517 - }, - { - "name": "minecraft:bamboo_double_slab", - "id": -521 - }, - { - "name": "minecraft:bamboo_fence", - "id": -515 - }, - { - "name": "minecraft:bamboo_fence_gate", - "id": -516 - }, - { - "name": "minecraft:bamboo_hanging_sign", - "id": -522 - }, - { - "name": "minecraft:bamboo_mosaic", - "id": -509 - }, - { - "name": "minecraft:bamboo_mosaic_double_slab", - "id": -525 - }, - { - "name": "minecraft:bamboo_mosaic_slab", - "id": -524 - }, - { - "name": "minecraft:bamboo_mosaic_stairs", - "id": -523 - }, - { - "name": "minecraft:bamboo_planks", - "id": -510 - }, - { - "name": "minecraft:bamboo_pressure_plate", - "id": -514 - }, - { - "name": "minecraft:bamboo_raft", - "id": 660 - }, - { - "name": "minecraft:bamboo_sapling", - "id": -164 - }, - { - "name": "minecraft:bamboo_sign", - "id": 659 - }, - { - "name": "minecraft:bamboo_slab", - "id": -513 - }, - { - "name": "minecraft:bamboo_stairs", - "id": -512 - }, - { - "name": "minecraft:bamboo_standing_sign", - "id": -518 - }, - { - "name": "minecraft:bamboo_trapdoor", - "id": -520 - }, - { - "name": "minecraft:bamboo_wall_sign", - "id": -519 - }, - { - "name": "minecraft:banner", - "id": 574 - }, - { - "name": "minecraft:banner_pattern", - "id": 710 - }, - { - "name": "minecraft:barrel", - "id": -203 - }, - { - "name": "minecraft:barrier", - "id": -161 - }, - { - "name": "minecraft:basalt", - "id": -234 - }, - { - "name": "minecraft:bat_spawn_egg", - "id": 455 - }, - { - "name": "minecraft:beacon", - "id": 138 - }, - { - "name": "minecraft:bed", - "id": 420 - }, - { - "name": "minecraft:bedrock", - "id": 7 - }, - { - "name": "minecraft:bee_nest", - "id": -218 - }, - { - "name": "minecraft:bee_spawn_egg", - "id": 496 - }, - { - "name": "minecraft:beef", - "id": 273 - }, - { - "name": "minecraft:beehive", - "id": -219 - }, - { - "name": "minecraft:beetroot", - "id": 285 - }, - { - "name": "minecraft:beetroot_seeds", - "id": 295 - }, - { - "name": "minecraft:beetroot_soup", - "id": 286 - }, - { - "name": "minecraft:bell", - "id": -206 - }, - { - "name": "minecraft:big_dripleaf", - "id": -323 - }, - { - "name": "minecraft:birch_boat", - "id": 378 - }, - { - "name": "minecraft:birch_button", - "id": -141 - }, - { - "name": "minecraft:birch_chest_boat", - "id": 646 - }, - { - "name": "minecraft:birch_door", - "id": 561 - }, - { - "name": "minecraft:birch_fence", - "id": -576 - }, - { - "name": "minecraft:birch_fence_gate", - "id": 184 - }, - { - "name": "minecraft:birch_hanging_sign", - "id": -502 - }, - { - "name": "minecraft:birch_log", - "id": -570 - }, - { - "name": "minecraft:birch_pressure_plate", - "id": -151 - }, - { - "name": "minecraft:birch_sign", - "id": 584 - }, - { - "name": "minecraft:birch_stairs", - "id": 135 - }, - { - "name": "minecraft:birch_standing_sign", - "id": -186 - }, - { - "name": "minecraft:birch_trapdoor", - "id": -146 - }, - { - "name": "minecraft:birch_wall_sign", - "id": -187 - }, - { - "name": "minecraft:black_candle", - "id": -428 - }, - { - "name": "minecraft:black_candle_cake", - "id": -445 - }, - { - "name": "minecraft:black_carpet", - "id": -611 - }, - { - "name": "minecraft:black_dye", - "id": 397 - }, - { - "name": "minecraft:black_glazed_terracotta", - "id": 235 - }, - { - "name": "minecraft:black_wool", - "id": -554 - }, - { - "name": "minecraft:blackstone", - "id": -273 - }, - { - "name": "minecraft:blackstone_double_slab", - "id": -283 - }, - { - "name": "minecraft:blackstone_slab", - "id": -282 - }, - { - "name": "minecraft:blackstone_stairs", - "id": -276 - }, - { - "name": "minecraft:blackstone_wall", - "id": -277 - }, - { - "name": "minecraft:blade_pottery_sherd", - "id": 666 - }, - { - "name": "minecraft:blast_furnace", - "id": -196 - }, - { - "name": "minecraft:blaze_powder", - "id": 431 - }, - { - "name": "minecraft:blaze_rod", - "id": 425 - }, - { - "name": "minecraft:blaze_spawn_egg", - "id": 458 - }, - { - "name": "minecraft:bleach", - "id": 603 - }, - { - "name": "minecraft:blue_candle", - "id": -424 - }, - { - "name": "minecraft:blue_candle_cake", - "id": -441 - }, - { - "name": "minecraft:blue_carpet", - "id": -607 - }, - { - "name": "minecraft:blue_dye", - "id": 401 - }, - { - "name": "minecraft:blue_glazed_terracotta", - "id": 231 - }, - { - "name": "minecraft:blue_ice", - "id": -11 - }, - { - "name": "minecraft:blue_wool", - "id": -563 - }, - { - "name": "minecraft:boat", - "id": 708 - }, - { - "name": "minecraft:bone", - "id": 417 - }, - { - "name": "minecraft:bone_block", - "id": 216 - }, - { - "name": "minecraft:bone_meal", - "id": 413 - }, - { - "name": "minecraft:book", - "id": 389 - }, - { - "name": "minecraft:bookshelf", - "id": 47 - }, - { - "name": "minecraft:border_block", - "id": 212 - }, - { - "name": "minecraft:bordure_indented_banner_pattern", - "id": 593 - }, - { - "name": "minecraft:bow", - "id": 302 - }, - { - "name": "minecraft:bowl", - "id": 323 - }, - { - "name": "minecraft:brain_coral", - "id": -581 - }, - { - "name": "minecraft:bread", - "id": 261 - }, - { - "name": "minecraft:brewer_pottery_sherd", - "id": 667 - }, - { - "name": "minecraft:brewing_stand", - "id": 433 - }, - { - "name": "minecraft:brick", - "id": 385 - }, - { - "name": "minecraft:brick_block", - "id": 45 - }, - { - "name": "minecraft:brick_stairs", - "id": 108 - }, - { - "name": "minecraft:brown_candle", - "id": -425 - }, - { - "name": "minecraft:brown_candle_cake", - "id": -442 - }, - { - "name": "minecraft:brown_carpet", - "id": -608 - }, - { - "name": "minecraft:brown_dye", - "id": 400 - }, - { - "name": "minecraft:brown_glazed_terracotta", - "id": 232 - }, - { - "name": "minecraft:brown_mushroom", - "id": 39 - }, - { - "name": "minecraft:brown_mushroom_block", - "id": 99 - }, - { - "name": "minecraft:brown_wool", - "id": -555 - }, - { - "name": "minecraft:brush", - "id": 683 - }, - { - "name": "minecraft:bubble_column", - "id": -160 - }, - { - "name": "minecraft:bubble_coral", - "id": -582 - }, - { - "name": "minecraft:bucket", - "id": 362 - }, - { - "name": "minecraft:budding_amethyst", - "id": -328 - }, - { - "name": "minecraft:burn_pottery_sherd", - "id": 668 - }, - { - "name": "minecraft:cactus", - "id": 81 - }, - { - "name": "minecraft:cake", - "id": 419 - }, - { - "name": "minecraft:calcite", - "id": -326 - }, - { - "name": "minecraft:calibrated_sculk_sensor", - "id": -580 - }, - { - "name": "minecraft:camel_spawn_egg", - "id": 662 - }, - { - "name": "minecraft:camera", - "id": 600 - }, - { - "name": "minecraft:campfire", - "id": 596 - }, - { - "name": "minecraft:candle", - "id": -412 - }, - { - "name": "minecraft:candle_cake", - "id": -429 - }, - { - "name": "minecraft:carpet", - "id": 703 - }, - { - "name": "minecraft:carrot", - "id": 279 - }, - { - "name": "minecraft:carrot_on_a_stick", - "id": 524 - }, - { - "name": "minecraft:carrots", - "id": 141 - }, - { - "name": "minecraft:cartography_table", - "id": -200 - }, - { - "name": "minecraft:carved_pumpkin", - "id": -155 - }, - { - "name": "minecraft:cat_spawn_egg", - "id": 490 - }, - { - "name": "minecraft:cauldron", - "id": 434 - }, - { - "name": "minecraft:cave_spider_spawn_egg", - "id": 459 - }, - { - "name": "minecraft:cave_vines", - "id": -322 - }, - { - "name": "minecraft:cave_vines_body_with_berries", - "id": -375 - }, - { - "name": "minecraft:cave_vines_head_with_berries", - "id": -376 - }, - { - "name": "minecraft:chain", - "id": 626 - }, - { - "name": "minecraft:chain_command_block", - "id": 189 - }, - { - "name": "minecraft:chainmail_boots", - "id": 344 - }, - { - "name": "minecraft:chainmail_chestplate", - "id": 342 - }, - { - "name": "minecraft:chainmail_helmet", - "id": 341 - }, - { - "name": "minecraft:chainmail_leggings", - "id": 343 - }, - { - "name": "minecraft:charcoal", - "id": 305 - }, - { - "name": "minecraft:chemical_heat", - "id": 192 - }, - { - "name": "minecraft:chemistry_table", - "id": 238 - }, - { - "name": "minecraft:cherry_boat", - "id": 656 - }, - { - "name": "minecraft:cherry_button", - "id": -530 - }, - { - "name": "minecraft:cherry_chest_boat", - "id": 657 - }, - { - "name": "minecraft:cherry_door", - "id": -531 - }, - { - "name": "minecraft:cherry_double_slab", - "id": -540 - }, - { - "name": "minecraft:cherry_fence", - "id": -532 - }, - { - "name": "minecraft:cherry_fence_gate", - "id": -533 - }, - { - "name": "minecraft:cherry_hanging_sign", - "id": -534 - }, - { - "name": "minecraft:cherry_leaves", - "id": -548 - }, - { - "name": "minecraft:cherry_log", - "id": -536 - }, - { - "name": "minecraft:cherry_planks", - "id": -537 - }, - { - "name": "minecraft:cherry_pressure_plate", - "id": -538 - }, - { - "name": "minecraft:cherry_sapling", - "id": -547 - }, - { - "name": "minecraft:cherry_sign", - "id": 658 - }, - { - "name": "minecraft:cherry_slab", - "id": -539 - }, - { - "name": "minecraft:cherry_stairs", - "id": -541 - }, - { - "name": "minecraft:cherry_standing_sign", - "id": -542 - }, - { - "name": "minecraft:cherry_trapdoor", - "id": -543 - }, - { - "name": "minecraft:cherry_wall_sign", - "id": -544 - }, - { - "name": "minecraft:cherry_wood", - "id": -546 - }, - { - "name": "minecraft:chest", - "id": 54 - }, - { - "name": "minecraft:chest_boat", - "id": 652 - }, - { - "name": "minecraft:chest_minecart", - "id": 391 - }, - { - "name": "minecraft:chicken", - "id": 275 - }, - { - "name": "minecraft:chicken_spawn_egg", - "id": 437 - }, - { - "name": "minecraft:chiseled_bookshelf", - "id": -526 - }, - { - "name": "minecraft:chiseled_deepslate", - "id": -395 - }, - { - "name": "minecraft:chiseled_nether_bricks", - "id": -302 - }, - { - "name": "minecraft:chiseled_polished_blackstone", - "id": -279 - }, - { - "name": "minecraft:chorus_flower", - "id": 200 - }, - { - "name": "minecraft:chorus_fruit", - "id": 565 - }, - { - "name": "minecraft:chorus_plant", - "id": 240 - }, - { - "name": "minecraft:clay", - "id": 82 - }, - { - "name": "minecraft:clay_ball", - "id": 386 - }, - { - "name": "minecraft:client_request_placeholder_block", - "id": -465 - }, - { - "name": "minecraft:clock", - "id": 395 - }, - { - "name": "minecraft:coal", - "id": 304 - }, - { - "name": "minecraft:coal_block", - "id": 173 - }, - { - "name": "minecraft:coal_ore", - "id": 16 - }, - { - "name": "minecraft:coast_armor_trim_smithing_template", - "id": 687 - }, - { - "name": "minecraft:cobbled_deepslate", - "id": -379 - }, - { - "name": "minecraft:cobbled_deepslate_double_slab", - "id": -396 - }, - { - "name": "minecraft:cobbled_deepslate_slab", - "id": -380 - }, - { - "name": "minecraft:cobbled_deepslate_stairs", - "id": -381 - }, - { - "name": "minecraft:cobbled_deepslate_wall", - "id": -382 - }, - { - "name": "minecraft:cobblestone", - "id": 4 - }, - { - "name": "minecraft:cobblestone_wall", - "id": 139 - }, - { - "name": "minecraft:cocoa", - "id": 127 - }, - { - "name": "minecraft:cocoa_beans", - "id": 414 - }, - { - "name": "minecraft:cod", - "id": 264 - }, - { - "name": "minecraft:cod_bucket", - "id": 366 - }, - { - "name": "minecraft:cod_spawn_egg", - "id": 482 - }, - { - "name": "minecraft:colored_torch_bp", - "id": 204 - }, - { - "name": "minecraft:colored_torch_rg", - "id": 202 - }, - { - "name": "minecraft:command_block", - "id": 137 - }, - { - "name": "minecraft:command_block_minecart", - "id": 570 - }, - { - "name": "minecraft:comparator", - "id": 529 - }, - { - "name": "minecraft:compass", - "id": 393 - }, - { - "name": "minecraft:composter", - "id": -213 - }, - { - "name": "minecraft:compound", - "id": 601 - }, - { - "name": "minecraft:concrete", - "id": 236 - }, - { - "name": "minecraft:concrete_powder", - "id": 237 - }, - { - "name": "minecraft:conduit", - "id": -157 - }, - { - "name": "minecraft:cooked_beef", - "id": 274 - }, - { - "name": "minecraft:cooked_chicken", - "id": 276 - }, - { - "name": "minecraft:cooked_cod", - "id": 268 - }, - { - "name": "minecraft:cooked_mutton", - "id": 558 - }, - { - "name": "minecraft:cooked_porkchop", - "id": 263 - }, - { - "name": "minecraft:cooked_rabbit", - "id": 289 - }, - { - "name": "minecraft:cooked_salmon", - "id": 269 - }, - { - "name": "minecraft:cookie", - "id": 271 - }, - { - "name": "minecraft:copper_block", - "id": -340 - }, - { - "name": "minecraft:copper_ingot", - "id": 511 - }, - { - "name": "minecraft:copper_ore", - "id": -311 - }, - { - "name": "minecraft:coral", - "id": 706 - }, - { - "name": "minecraft:coral_block", - "id": -132 - }, - { - "name": "minecraft:coral_fan", - "id": -133 - }, - { - "name": "minecraft:coral_fan_dead", - "id": -134 - }, - { - "name": "minecraft:coral_fan_hang", - "id": -135 - }, - { - "name": "minecraft:coral_fan_hang2", - "id": -136 - }, - { - "name": "minecraft:coral_fan_hang3", - "id": -137 - }, - { - "name": "minecraft:cow_spawn_egg", - "id": 438 - }, - { - "name": "minecraft:cracked_deepslate_bricks", - "id": -410 - }, - { - "name": "minecraft:cracked_deepslate_tiles", - "id": -409 - }, - { - "name": "minecraft:cracked_nether_bricks", - "id": -303 - }, - { - "name": "minecraft:cracked_polished_blackstone_bricks", - "id": -280 - }, - { - "name": "minecraft:crafting_table", - "id": 58 - }, - { - "name": "minecraft:creeper_banner_pattern", - "id": 589 - }, - { - "name": "minecraft:creeper_spawn_egg", - "id": 443 - }, - { - "name": "minecraft:crimson_button", - "id": -260 - }, - { - "name": "minecraft:crimson_door", - "id": 623 - }, - { - "name": "minecraft:crimson_double_slab", - "id": -266 - }, - { - "name": "minecraft:crimson_fence", - "id": -256 - }, - { - "name": "minecraft:crimson_fence_gate", - "id": -258 - }, - { - "name": "minecraft:crimson_fungus", - "id": -228 - }, - { - "name": "minecraft:crimson_hanging_sign", - "id": -506 - }, - { - "name": "minecraft:crimson_hyphae", - "id": -299 - }, - { - "name": "minecraft:crimson_nylium", - "id": -232 - }, - { - "name": "minecraft:crimson_planks", - "id": -242 - }, - { - "name": "minecraft:crimson_pressure_plate", - "id": -262 - }, - { - "name": "minecraft:crimson_roots", - "id": -223 - }, - { - "name": "minecraft:crimson_sign", - "id": 621 - }, - { - "name": "minecraft:crimson_slab", - "id": -264 - }, - { - "name": "minecraft:crimson_stairs", - "id": -254 - }, - { - "name": "minecraft:crimson_standing_sign", - "id": -250 - }, - { - "name": "minecraft:crimson_stem", - "id": -225 - }, - { - "name": "minecraft:crimson_trapdoor", - "id": -246 - }, - { - "name": "minecraft:crimson_wall_sign", - "id": -252 - }, - { - "name": "minecraft:crossbow", - "id": 582 - }, - { - "name": "minecraft:crying_obsidian", - "id": -289 - }, - { - "name": "minecraft:cut_copper", - "id": -347 - }, - { - "name": "minecraft:cut_copper_slab", - "id": -361 - }, - { - "name": "minecraft:cut_copper_stairs", - "id": -354 - }, - { - "name": "minecraft:cyan_candle", - "id": -422 - }, - { - "name": "minecraft:cyan_candle_cake", - "id": -439 - }, - { - "name": "minecraft:cyan_carpet", - "id": -605 - }, - { - "name": "minecraft:cyan_dye", - "id": 403 - }, - { - "name": "minecraft:cyan_glazed_terracotta", - "id": 229 - }, - { - "name": "minecraft:cyan_wool", - "id": -561 - }, - { - "name": "minecraft:danger_pottery_sherd", - "id": 669 - }, - { - "name": "minecraft:dark_oak_boat", - "id": 382 - }, - { - "name": "minecraft:dark_oak_button", - "id": -142 - }, - { - "name": "minecraft:dark_oak_chest_boat", - "id": 650 - }, - { - "name": "minecraft:dark_oak_door", - "id": 564 - }, - { - "name": "minecraft:dark_oak_fence", - "id": -577 - }, - { - "name": "minecraft:dark_oak_fence_gate", - "id": 186 - }, - { - "name": "minecraft:dark_oak_hanging_sign", - "id": -505 - }, - { - "name": "minecraft:dark_oak_log", - "id": -572 - }, - { - "name": "minecraft:dark_oak_pressure_plate", - "id": -152 - }, - { - "name": "minecraft:dark_oak_sign", - "id": 587 - }, - { - "name": "minecraft:dark_oak_stairs", - "id": 164 - }, - { - "name": "minecraft:dark_oak_trapdoor", - "id": -147 - }, - { - "name": "minecraft:dark_prismarine_stairs", - "id": -3 - }, - { - "name": "minecraft:darkoak_standing_sign", - "id": -192 - }, - { - "name": "minecraft:darkoak_wall_sign", - "id": -193 - }, - { - "name": "minecraft:daylight_detector", - "id": 151 - }, - { - "name": "minecraft:daylight_detector_inverted", - "id": 178 - }, - { - "name": "minecraft:dead_brain_coral", - "id": -586 - }, - { - "name": "minecraft:dead_bubble_coral", - "id": -587 - }, - { - "name": "minecraft:dead_fire_coral", - "id": -588 - }, - { - "name": "minecraft:dead_horn_coral", - "id": -589 - }, - { - "name": "minecraft:dead_tube_coral", - "id": -585 - }, - { - "name": "minecraft:deadbush", - "id": 32 - }, - { - "name": "minecraft:decorated_pot", - "id": -551 - }, - { - "name": "minecraft:deepslate", - "id": -378 - }, - { - "name": "minecraft:deepslate_brick_double_slab", - "id": -399 - }, - { - "name": "minecraft:deepslate_brick_slab", - "id": -392 - }, - { - "name": "minecraft:deepslate_brick_stairs", - "id": -393 - }, - { - "name": "minecraft:deepslate_brick_wall", - "id": -394 - }, - { - "name": "minecraft:deepslate_bricks", - "id": -391 - }, - { - "name": "minecraft:deepslate_coal_ore", - "id": -406 - }, - { - "name": "minecraft:deepslate_copper_ore", - "id": -408 - }, - { - "name": "minecraft:deepslate_diamond_ore", - "id": -405 - }, - { - "name": "minecraft:deepslate_emerald_ore", - "id": -407 - }, - { - "name": "minecraft:deepslate_gold_ore", - "id": -402 - }, - { - "name": "minecraft:deepslate_iron_ore", - "id": -401 - }, - { - "name": "minecraft:deepslate_lapis_ore", - "id": -400 - }, - { - "name": "minecraft:deepslate_redstone_ore", - "id": -403 - }, - { - "name": "minecraft:deepslate_tile_double_slab", - "id": -398 - }, - { - "name": "minecraft:deepslate_tile_slab", - "id": -388 - }, - { - "name": "minecraft:deepslate_tile_stairs", - "id": -389 - }, - { - "name": "minecraft:deepslate_tile_wall", - "id": -390 - }, - { - "name": "minecraft:deepslate_tiles", - "id": -387 - }, - { - "name": "minecraft:deny", - "id": 211 - }, - { - "name": "minecraft:detector_rail", - "id": 28 - }, - { - "name": "minecraft:diamond", - "id": 306 - }, - { - "name": "minecraft:diamond_axe", - "id": 321 - }, - { - "name": "minecraft:diamond_block", - "id": 57 - }, - { - "name": "minecraft:diamond_boots", - "id": 352 - }, - { - "name": "minecraft:diamond_chestplate", - "id": 350 - }, - { - "name": "minecraft:diamond_helmet", - "id": 349 - }, - { - "name": "minecraft:diamond_hoe", - "id": 334 - }, - { - "name": "minecraft:diamond_horse_armor", - "id": 540 - }, - { - "name": "minecraft:diamond_leggings", - "id": 351 - }, - { - "name": "minecraft:diamond_ore", - "id": 56 - }, - { - "name": "minecraft:diamond_pickaxe", - "id": 320 - }, - { - "name": "minecraft:diamond_shovel", - "id": 319 - }, - { - "name": "minecraft:diamond_sword", - "id": 318 - }, - { - "name": "minecraft:diorite_stairs", - "id": -170 - }, - { - "name": "minecraft:dirt", - "id": 3 - }, - { - "name": "minecraft:dirt_with_roots", - "id": -318 - }, - { - "name": "minecraft:disc_fragment_5", - "id": 644 - }, - { - "name": "minecraft:dispenser", - "id": 23 - }, - { - "name": "minecraft:dolphin_spawn_egg", - "id": 486 - }, - { - "name": "minecraft:donkey_spawn_egg", - "id": 467 - }, - { - "name": "minecraft:double_cut_copper_slab", - "id": -368 - }, - { - "name": "minecraft:double_plant", - "id": 175 - }, - { - "name": "minecraft:double_stone_block_slab", - "id": 43 - }, - { - "name": "minecraft:double_stone_block_slab2", - "id": 181 - }, - { - "name": "minecraft:double_stone_block_slab3", - "id": -167 - }, - { - "name": "minecraft:double_stone_block_slab4", - "id": -168 - }, - { - "name": "minecraft:double_wooden_slab", - "id": 157 - }, - { - "name": "minecraft:dragon_breath", - "id": 567 - }, - { - "name": "minecraft:dragon_egg", - "id": 122 - }, - { - "name": "minecraft:dried_kelp", - "id": 270 - }, - { - "name": "minecraft:dried_kelp_block", - "id": -139 - }, - { - "name": "minecraft:dripstone_block", - "id": -317 - }, - { - "name": "minecraft:dropper", - "id": 125 - }, - { - "name": "minecraft:drowned_spawn_egg", - "id": 485 - }, - { - "name": "minecraft:dune_armor_trim_smithing_template", - "id": 686 - }, - { - "name": "minecraft:dye", - "id": 709 - }, - { - "name": "minecraft:echo_shard", - "id": 654 - }, - { - "name": "minecraft:egg", - "id": 392 - }, - { - "name": "minecraft:elder_guardian_spawn_egg", - "id": 473 - }, - { - "name": "minecraft:element_0", - "id": 36 - }, - { - "name": "minecraft:element_1", - "id": -12 - }, - { - "name": "minecraft:element_10", - "id": -21 - }, - { - "name": "minecraft:element_100", - "id": -111 - }, - { - "name": "minecraft:element_101", - "id": -112 - }, - { - "name": "minecraft:element_102", - "id": -113 - }, - { - "name": "minecraft:element_103", - "id": -114 - }, - { - "name": "minecraft:element_104", - "id": -115 - }, - { - "name": "minecraft:element_105", - "id": -116 - }, - { - "name": "minecraft:element_106", - "id": -117 - }, - { - "name": "minecraft:element_107", - "id": -118 - }, - { - "name": "minecraft:element_108", - "id": -119 - }, - { - "name": "minecraft:element_109", - "id": -120 - }, - { - "name": "minecraft:element_11", - "id": -22 - }, - { - "name": "minecraft:element_110", - "id": -121 - }, - { - "name": "minecraft:element_111", - "id": -122 - }, - { - "name": "minecraft:element_112", - "id": -123 - }, - { - "name": "minecraft:element_113", - "id": -124 - }, - { - "name": "minecraft:element_114", - "id": -125 - }, - { - "name": "minecraft:element_115", - "id": -126 - }, - { - "name": "minecraft:element_116", - "id": -127 - }, - { - "name": "minecraft:element_117", - "id": -128 - }, - { - "name": "minecraft:element_118", - "id": -129 - }, - { - "name": "minecraft:element_12", - "id": -23 - }, - { - "name": "minecraft:element_13", - "id": -24 - }, - { - "name": "minecraft:element_14", - "id": -25 - }, - { - "name": "minecraft:element_15", - "id": -26 - }, - { - "name": "minecraft:element_16", - "id": -27 - }, - { - "name": "minecraft:element_17", - "id": -28 - }, - { - "name": "minecraft:element_18", - "id": -29 - }, - { - "name": "minecraft:element_19", - "id": -30 - }, - { - "name": "minecraft:element_2", - "id": -13 - }, - { - "name": "minecraft:element_20", - "id": -31 - }, - { - "name": "minecraft:element_21", - "id": -32 - }, - { - "name": "minecraft:element_22", - "id": -33 - }, - { - "name": "minecraft:element_23", - "id": -34 - }, - { - "name": "minecraft:element_24", - "id": -35 - }, - { - "name": "minecraft:element_25", - "id": -36 - }, - { - "name": "minecraft:element_26", - "id": -37 - }, - { - "name": "minecraft:element_27", - "id": -38 - }, - { - "name": "minecraft:element_28", - "id": -39 - }, - { - "name": "minecraft:element_29", - "id": -40 - }, - { - "name": "minecraft:element_3", - "id": -14 - }, - { - "name": "minecraft:element_30", - "id": -41 - }, - { - "name": "minecraft:element_31", - "id": -42 - }, - { - "name": "minecraft:element_32", - "id": -43 - }, - { - "name": "minecraft:element_33", - "id": -44 - }, - { - "name": "minecraft:element_34", - "id": -45 - }, - { - "name": "minecraft:element_35", - "id": -46 - }, - { - "name": "minecraft:element_36", - "id": -47 - }, - { - "name": "minecraft:element_37", - "id": -48 - }, - { - "name": "minecraft:element_38", - "id": -49 - }, - { - "name": "minecraft:element_39", - "id": -50 - }, - { - "name": "minecraft:element_4", - "id": -15 - }, - { - "name": "minecraft:element_40", - "id": -51 - }, - { - "name": "minecraft:element_41", - "id": -52 - }, - { - "name": "minecraft:element_42", - "id": -53 - }, - { - "name": "minecraft:element_43", - "id": -54 - }, - { - "name": "minecraft:element_44", - "id": -55 - }, - { - "name": "minecraft:element_45", - "id": -56 - }, - { - "name": "minecraft:element_46", - "id": -57 - }, - { - "name": "minecraft:element_47", - "id": -58 - }, - { - "name": "minecraft:element_48", - "id": -59 - }, - { - "name": "minecraft:element_49", - "id": -60 - }, - { - "name": "minecraft:element_5", - "id": -16 - }, - { - "name": "minecraft:element_50", - "id": -61 - }, - { - "name": "minecraft:element_51", - "id": -62 - }, - { - "name": "minecraft:element_52", - "id": -63 - }, - { - "name": "minecraft:element_53", - "id": -64 - }, - { - "name": "minecraft:element_54", - "id": -65 - }, - { - "name": "minecraft:element_55", - "id": -66 - }, - { - "name": "minecraft:element_56", - "id": -67 - }, - { - "name": "minecraft:element_57", - "id": -68 - }, - { - "name": "minecraft:element_58", - "id": -69 - }, - { - "name": "minecraft:element_59", - "id": -70 - }, - { - "name": "minecraft:element_6", - "id": -17 - }, - { - "name": "minecraft:element_60", - "id": -71 - }, - { - "name": "minecraft:element_61", - "id": -72 - }, - { - "name": "minecraft:element_62", - "id": -73 - }, - { - "name": "minecraft:element_63", - "id": -74 - }, - { - "name": "minecraft:element_64", - "id": -75 - }, - { - "name": "minecraft:element_65", - "id": -76 - }, - { - "name": "minecraft:element_66", - "id": -77 - }, - { - "name": "minecraft:element_67", - "id": -78 - }, - { - "name": "minecraft:element_68", - "id": -79 - }, - { - "name": "minecraft:element_69", - "id": -80 - }, - { - "name": "minecraft:element_7", - "id": -18 - }, - { - "name": "minecraft:element_70", - "id": -81 - }, - { - "name": "minecraft:element_71", - "id": -82 - }, - { - "name": "minecraft:element_72", - "id": -83 - }, - { - "name": "minecraft:element_73", - "id": -84 - }, - { - "name": "minecraft:element_74", - "id": -85 - }, - { - "name": "minecraft:element_75", - "id": -86 - }, - { - "name": "minecraft:element_76", - "id": -87 - }, - { - "name": "minecraft:element_77", - "id": -88 - }, - { - "name": "minecraft:element_78", - "id": -89 - }, - { - "name": "minecraft:element_79", - "id": -90 - }, - { - "name": "minecraft:element_8", - "id": -19 - }, - { - "name": "minecraft:element_80", - "id": -91 - }, - { - "name": "minecraft:element_81", - "id": -92 - }, - { - "name": "minecraft:element_82", - "id": -93 - }, - { - "name": "minecraft:element_83", - "id": -94 - }, - { - "name": "minecraft:element_84", - "id": -95 - }, - { - "name": "minecraft:element_85", - "id": -96 - }, - { - "name": "minecraft:element_86", - "id": -97 - }, - { - "name": "minecraft:element_87", - "id": -98 - }, - { - "name": "minecraft:element_88", - "id": -99 - }, - { - "name": "minecraft:element_89", - "id": -100 - }, - { - "name": "minecraft:element_9", - "id": -20 - }, - { - "name": "minecraft:element_90", - "id": -101 - }, - { - "name": "minecraft:element_91", - "id": -102 - }, - { - "name": "minecraft:element_92", - "id": -103 - }, - { - "name": "minecraft:element_93", - "id": -104 - }, - { - "name": "minecraft:element_94", - "id": -105 - }, - { - "name": "minecraft:element_95", - "id": -106 - }, - { - "name": "minecraft:element_96", - "id": -107 - }, - { - "name": "minecraft:element_97", - "id": -108 - }, - { - "name": "minecraft:element_98", - "id": -109 - }, - { - "name": "minecraft:element_99", - "id": -110 - }, - { - "name": "minecraft:elytra", - "id": 571 - }, - { - "name": "minecraft:emerald", - "id": 519 - }, - { - "name": "minecraft:emerald_block", - "id": 133 - }, - { - "name": "minecraft:emerald_ore", - "id": 129 - }, - { - "name": "minecraft:empty_map", - "id": 522 - }, - { - "name": "minecraft:enchanted_book", - "id": 528 - }, - { - "name": "minecraft:enchanted_golden_apple", - "id": 259 - }, - { - "name": "minecraft:enchanting_table", - "id": 116 - }, - { - "name": "minecraft:end_brick_stairs", - "id": -178 - }, - { - "name": "minecraft:end_bricks", - "id": 206 - }, - { - "name": "minecraft:end_crystal", - "id": 712 - }, - { - "name": "minecraft:end_gateway", - "id": 209 - }, - { - "name": "minecraft:end_portal", - "id": 119 - }, - { - "name": "minecraft:end_portal_frame", - "id": 120 - }, - { - "name": "minecraft:end_rod", - "id": 208 - }, - { - "name": "minecraft:end_stone", - "id": 121 - }, - { - "name": "minecraft:ender_chest", - "id": 130 - }, - { - "name": "minecraft:ender_dragon_spawn_egg", - "id": 508 - }, - { - "name": "minecraft:ender_eye", - "id": 435 - }, - { - "name": "minecraft:ender_pearl", - "id": 424 - }, - { - "name": "minecraft:enderman_spawn_egg", - "id": 444 - }, - { - "name": "minecraft:endermite_spawn_egg", - "id": 462 - }, - { - "name": "minecraft:evoker_spawn_egg", - "id": 477 - }, - { - "name": "minecraft:experience_bottle", - "id": 515 - }, - { - "name": "minecraft:explorer_pottery_sherd", - "id": 670 - }, - { - "name": "minecraft:exposed_copper", - "id": -341 - }, - { - "name": "minecraft:exposed_cut_copper", - "id": -348 - }, - { - "name": "minecraft:exposed_cut_copper_slab", - "id": -362 - }, - { - "name": "minecraft:exposed_cut_copper_stairs", - "id": -355 - }, - { - "name": "minecraft:exposed_double_cut_copper_slab", - "id": -369 - }, - { - "name": "minecraft:eye_armor_trim_smithing_template", - "id": 690 - }, - { - "name": "minecraft:farmland", - "id": 60 - }, - { - "name": "minecraft:feather", - "id": 329 - }, - { - "name": "minecraft:fence", - "id": 705 - }, - { - "name": "minecraft:fence_gate", - "id": 107 - }, - { - "name": "minecraft:fermented_spider_eye", - "id": 430 - }, - { - "name": "minecraft:field_masoned_banner_pattern", - "id": 592 - }, - { - "name": "minecraft:filled_map", - "id": 422 - }, - { - "name": "minecraft:fire", - "id": 51 - }, - { - "name": "minecraft:fire_charge", - "id": 516 - }, - { - "name": "minecraft:fire_coral", - "id": -583 - }, - { - "name": "minecraft:firework_rocket", - "id": 526 - }, - { - "name": "minecraft:firework_star", - "id": 527 - }, - { - "name": "minecraft:fishing_rod", - "id": 394 - }, - { - "name": "minecraft:fletching_table", - "id": -201 - }, - { - "name": "minecraft:flint", - "id": 358 - }, - { - "name": "minecraft:flint_and_steel", - "id": 301 - }, - { - "name": "minecraft:flower_banner_pattern", - "id": 588 - }, - { - "name": "minecraft:flower_pot", - "id": 521 - }, - { - "name": "minecraft:flowering_azalea", - "id": -338 - }, - { - "name": "minecraft:flowing_lava", - "id": 10 - }, - { - "name": "minecraft:flowing_water", - "id": 8 - }, - { - "name": "minecraft:fox_spawn_egg", - "id": 492 - }, - { - "name": "minecraft:frame", - "id": 520 - }, - { - "name": "minecraft:friend_pottery_sherd", - "id": 671 - }, - { - "name": "minecraft:frog_spawn", - "id": -468 - }, - { - "name": "minecraft:frog_spawn_egg", - "id": 635 - }, - { - "name": "minecraft:frosted_ice", - "id": 207 - }, - { - "name": "minecraft:furnace", - "id": 61 - }, - { - "name": "minecraft:ghast_spawn_egg", - "id": 456 - }, - { - "name": "minecraft:ghast_tear", - "id": 426 - }, - { - "name": "minecraft:gilded_blackstone", - "id": -281 - }, - { - "name": "minecraft:glass", - "id": 20 - }, - { - "name": "minecraft:glass_bottle", - "id": 429 - }, - { - "name": "minecraft:glass_pane", - "id": 102 - }, - { - "name": "minecraft:glistering_melon_slice", - "id": 436 - }, - { - "name": "minecraft:globe_banner_pattern", - "id": 595 - }, - { - "name": "minecraft:glow_berries", - "id": 713 - }, - { - "name": "minecraft:glow_frame", - "id": 630 - }, - { - "name": "minecraft:glow_ink_sac", - "id": 510 - }, - { - "name": "minecraft:glow_lichen", - "id": -411 - }, - { - "name": "minecraft:glow_squid_spawn_egg", - "id": 505 - }, - { - "name": "minecraft:glow_stick", - "id": 608 - }, - { - "name": "minecraft:glowingobsidian", - "id": 246 - }, - { - "name": "minecraft:glowstone", - "id": 89 - }, - { - "name": "minecraft:glowstone_dust", - "id": 396 - }, - { - "name": "minecraft:goat_horn", - "id": 634 - }, - { - "name": "minecraft:goat_spawn_egg", - "id": 504 - }, - { - "name": "minecraft:gold_block", - "id": 41 - }, - { - "name": "minecraft:gold_ingot", - "id": 308 - }, - { - "name": "minecraft:gold_nugget", - "id": 427 - }, - { - "name": "minecraft:gold_ore", - "id": 14 - }, - { - "name": "minecraft:golden_apple", - "id": 258 - }, - { - "name": "minecraft:golden_axe", - "id": 327 - }, - { - "name": "minecraft:golden_boots", - "id": 356 - }, - { - "name": "minecraft:golden_carrot", - "id": 283 - }, - { - "name": "minecraft:golden_chestplate", - "id": 354 - }, - { - "name": "minecraft:golden_helmet", - "id": 353 - }, - { - "name": "minecraft:golden_hoe", - "id": 335 - }, - { - "name": "minecraft:golden_horse_armor", - "id": 539 - }, - { - "name": "minecraft:golden_leggings", - "id": 355 - }, - { - "name": "minecraft:golden_pickaxe", - "id": 326 - }, - { - "name": "minecraft:golden_rail", - "id": 27 - }, - { - "name": "minecraft:golden_shovel", - "id": 325 - }, - { - "name": "minecraft:golden_sword", - "id": 324 - }, - { - "name": "minecraft:granite_stairs", - "id": -169 - }, - { - "name": "minecraft:grass", - "id": 2 - }, - { - "name": "minecraft:grass_path", - "id": 198 - }, - { - "name": "minecraft:gravel", - "id": 13 - }, - { - "name": "minecraft:gray_candle", - "id": -420 - }, - { - "name": "minecraft:gray_candle_cake", - "id": -437 - }, - { - "name": "minecraft:gray_carpet", - "id": -603 - }, - { - "name": "minecraft:gray_dye", - "id": 405 - }, - { - "name": "minecraft:gray_glazed_terracotta", - "id": 227 - }, - { - "name": "minecraft:gray_wool", - "id": -553 - }, - { - "name": "minecraft:green_candle", - "id": -426 - }, - { - "name": "minecraft:green_candle_cake", - "id": -443 - }, - { - "name": "minecraft:green_carpet", - "id": -609 - }, - { - "name": "minecraft:green_dye", - "id": 399 - }, - { - "name": "minecraft:green_glazed_terracotta", - "id": 233 - }, - { - "name": "minecraft:green_wool", - "id": -560 - }, - { - "name": "minecraft:grindstone", - "id": -195 - }, - { - "name": "minecraft:guardian_spawn_egg", - "id": 463 - }, - { - "name": "minecraft:gunpowder", - "id": 330 - }, - { - "name": "minecraft:hanging_roots", - "id": -319 - }, - { - "name": "minecraft:hard_glass", - "id": 253 - }, - { - "name": "minecraft:hard_glass_pane", - "id": 190 - }, - { - "name": "minecraft:hard_stained_glass", - "id": 254 - }, - { - "name": "minecraft:hard_stained_glass_pane", - "id": 191 - }, - { - "name": "minecraft:hardened_clay", - "id": 172 - }, - { - "name": "minecraft:hay_block", - "id": 170 - }, - { - "name": "minecraft:heart_of_the_sea", - "id": 578 - }, - { - "name": "minecraft:heart_pottery_sherd", - "id": 672 - }, - { - "name": "minecraft:heartbreak_pottery_sherd", - "id": 673 - }, - { - "name": "minecraft:heavy_weighted_pressure_plate", - "id": 148 - }, - { - "name": "minecraft:hoglin_spawn_egg", - "id": 498 - }, - { - "name": "minecraft:honey_block", - "id": -220 - }, - { - "name": "minecraft:honey_bottle", - "id": 599 - }, - { - "name": "minecraft:honeycomb", - "id": 598 - }, - { - "name": "minecraft:honeycomb_block", - "id": -221 - }, - { - "name": "minecraft:hopper", - "id": 534 - }, - { - "name": "minecraft:hopper_minecart", - "id": 533 - }, - { - "name": "minecraft:horn_coral", - "id": -584 - }, - { - "name": "minecraft:horse_spawn_egg", - "id": 460 - }, - { - "name": "minecraft:host_armor_trim_smithing_template", - "id": 700 - }, - { - "name": "minecraft:howl_pottery_sherd", - "id": 674 - }, - { - "name": "minecraft:husk_spawn_egg", - "id": 465 - }, - { - "name": "minecraft:ice", - "id": 79 - }, - { - "name": "minecraft:ice_bomb", - "id": 602 - }, - { - "name": "minecraft:infested_deepslate", - "id": -454 - }, - { - "name": "minecraft:info_update", - "id": 248 - }, - { - "name": "minecraft:info_update2", - "id": 249 - }, - { - "name": "minecraft:ink_sac", - "id": 415 - }, - { - "name": "minecraft:invisible_bedrock", - "id": 95 - }, - { - "name": "minecraft:iron_axe", - "id": 300 - }, - { - "name": "minecraft:iron_bars", - "id": 101 - }, - { - "name": "minecraft:iron_block", - "id": 42 - }, - { - "name": "minecraft:iron_boots", - "id": 348 - }, - { - "name": "minecraft:iron_chestplate", - "id": 346 - }, - { - "name": "minecraft:iron_door", - "id": 374 - }, - { - "name": "minecraft:iron_golem_spawn_egg", - "id": 506 - }, - { - "name": "minecraft:iron_helmet", - "id": 345 - }, - { - "name": "minecraft:iron_hoe", - "id": 333 - }, - { - "name": "minecraft:iron_horse_armor", - "id": 538 - }, - { - "name": "minecraft:iron_ingot", - "id": 307 - }, - { - "name": "minecraft:iron_leggings", - "id": 347 - }, - { - "name": "minecraft:iron_nugget", - "id": 576 - }, - { - "name": "minecraft:iron_ore", - "id": 15 - }, - { - "name": "minecraft:iron_pickaxe", - "id": 299 - }, - { - "name": "minecraft:iron_shovel", - "id": 298 - }, - { - "name": "minecraft:iron_sword", - "id": 309 - }, - { - "name": "minecraft:iron_trapdoor", - "id": 167 - }, - { - "name": "minecraft:item.acacia_door", - "id": 196 - }, - { - "name": "minecraft:item.bed", - "id": 26 - }, - { - "name": "minecraft:item.beetroot", - "id": 244 - }, - { - "name": "minecraft:item.birch_door", - "id": 194 - }, - { - "name": "minecraft:item.brewing_stand", - "id": 117 - }, - { - "name": "minecraft:item.cake", - "id": 92 - }, - { - "name": "minecraft:item.camera", - "id": 242 - }, - { - "name": "minecraft:item.campfire", - "id": -209 - }, - { - "name": "minecraft:item.cauldron", - "id": 118 - }, - { - "name": "minecraft:item.chain", - "id": -286 - }, - { - "name": "minecraft:item.crimson_door", - "id": -244 - }, - { - "name": "minecraft:item.dark_oak_door", - "id": 197 - }, - { - "name": "minecraft:item.flower_pot", - "id": 140 - }, - { - "name": "minecraft:item.frame", - "id": 199 - }, - { - "name": "minecraft:item.glow_frame", - "id": -339 - }, - { - "name": "minecraft:item.hopper", - "id": 154 - }, - { - "name": "minecraft:item.iron_door", - "id": 71 - }, - { - "name": "minecraft:item.jungle_door", - "id": 195 - }, - { - "name": "minecraft:item.kelp", - "id": -138 - }, - { - "name": "minecraft:item.mangrove_door", - "id": -493 - }, - { - "name": "minecraft:item.nether_sprouts", - "id": -238 - }, - { - "name": "minecraft:item.nether_wart", - "id": 115 - }, - { - "name": "minecraft:item.reeds", - "id": 83 - }, - { - "name": "minecraft:item.skull", - "id": 144 - }, - { - "name": "minecraft:item.soul_campfire", - "id": -290 - }, - { - "name": "minecraft:item.spruce_door", - "id": 193 - }, - { - "name": "minecraft:item.warped_door", - "id": -245 - }, - { - "name": "minecraft:item.wheat", - "id": 59 - }, - { - "name": "minecraft:item.wooden_door", - "id": 64 - }, - { - "name": "minecraft:jigsaw", - "id": -211 - }, - { - "name": "minecraft:jukebox", - "id": 84 - }, - { - "name": "minecraft:jungle_boat", - "id": 379 - }, - { - "name": "minecraft:jungle_button", - "id": -143 - }, - { - "name": "minecraft:jungle_chest_boat", - "id": 647 - }, - { - "name": "minecraft:jungle_door", - "id": 562 - }, - { - "name": "minecraft:jungle_fence", - "id": -578 - }, - { - "name": "minecraft:jungle_fence_gate", - "id": 185 - }, - { - "name": "minecraft:jungle_hanging_sign", - "id": -503 - }, - { - "name": "minecraft:jungle_log", - "id": -571 - }, - { - "name": "minecraft:jungle_pressure_plate", - "id": -153 - }, - { - "name": "minecraft:jungle_sign", - "id": 585 - }, - { - "name": "minecraft:jungle_stairs", - "id": 136 - }, - { - "name": "minecraft:jungle_standing_sign", - "id": -188 - }, - { - "name": "minecraft:jungle_trapdoor", - "id": -148 - }, - { - "name": "minecraft:jungle_wall_sign", - "id": -189 - }, - { - "name": "minecraft:kelp", - "id": 384 - }, - { - "name": "minecraft:ladder", - "id": 65 - }, - { - "name": "minecraft:lantern", - "id": -208 - }, - { - "name": "minecraft:lapis_block", - "id": 22 - }, - { - "name": "minecraft:lapis_lazuli", - "id": 416 - }, - { - "name": "minecraft:lapis_ore", - "id": 21 - }, - { - "name": "minecraft:large_amethyst_bud", - "id": -330 - }, - { - "name": "minecraft:lava", - "id": 11 - }, - { - "name": "minecraft:lava_bucket", - "id": 365 - }, - { - "name": "minecraft:lead", - "id": 554 - }, - { - "name": "minecraft:leather", - "id": 383 - }, - { - "name": "minecraft:leather_boots", - "id": 340 - }, - { - "name": "minecraft:leather_chestplate", - "id": 338 - }, - { - "name": "minecraft:leather_helmet", - "id": 337 - }, - { - "name": "minecraft:leather_horse_armor", - "id": 537 - }, - { - "name": "minecraft:leather_leggings", - "id": 339 - }, - { - "name": "minecraft:leaves", - "id": 18 - }, - { - "name": "minecraft:leaves2", - "id": 161 - }, - { - "name": "minecraft:lectern", - "id": -194 - }, - { - "name": "minecraft:lever", - "id": 69 - }, - { - "name": "minecraft:light_block", - "id": -215 - }, - { - "name": "minecraft:light_blue_candle", - "id": -416 - }, - { - "name": "minecraft:light_blue_candle_cake", - "id": -433 - }, - { - "name": "minecraft:light_blue_carpet", - "id": -599 - }, - { - "name": "minecraft:light_blue_dye", - "id": 409 - }, - { - "name": "minecraft:light_blue_glazed_terracotta", - "id": 223 - }, - { - "name": "minecraft:light_blue_wool", - "id": -562 - }, - { - "name": "minecraft:light_gray_candle", - "id": -421 - }, - { - "name": "minecraft:light_gray_candle_cake", - "id": -438 - }, - { - "name": "minecraft:light_gray_carpet", - "id": -604 - }, - { - "name": "minecraft:light_gray_dye", - "id": 404 - }, - { - "name": "minecraft:light_gray_wool", - "id": -552 - }, - { - "name": "minecraft:light_weighted_pressure_plate", - "id": 147 - }, - { - "name": "minecraft:lightning_rod", - "id": -312 - }, - { - "name": "minecraft:lime_candle", - "id": -418 - }, - { - "name": "minecraft:lime_candle_cake", - "id": -435 - }, - { - "name": "minecraft:lime_carpet", - "id": -601 - }, - { - "name": "minecraft:lime_dye", - "id": 407 - }, - { - "name": "minecraft:lime_glazed_terracotta", - "id": 225 - }, - { - "name": "minecraft:lime_wool", - "id": -559 - }, - { - "name": "minecraft:lingering_potion", - "id": 569 - }, - { - "name": "minecraft:lit_blast_furnace", - "id": -214 - }, - { - "name": "minecraft:lit_deepslate_redstone_ore", - "id": -404 - }, - { - "name": "minecraft:lit_furnace", - "id": 62 - }, - { - "name": "minecraft:lit_pumpkin", - "id": 91 - }, - { - "name": "minecraft:lit_redstone_lamp", - "id": 124 - }, - { - "name": "minecraft:lit_redstone_ore", - "id": 74 - }, - { - "name": "minecraft:lit_smoker", - "id": -199 - }, - { - "name": "minecraft:llama_spawn_egg", - "id": 475 - }, - { - "name": "minecraft:lodestone", - "id": -222 - }, - { - "name": "minecraft:lodestone_compass", - "id": 609 - }, - { - "name": "minecraft:log", - "id": 704 - }, - { - "name": "minecraft:log2", - "id": 707 - }, - { - "name": "minecraft:loom", - "id": -204 - }, - { - "name": "minecraft:magenta_candle", - "id": -415 - }, - { - "name": "minecraft:magenta_candle_cake", - "id": -432 - }, - { - "name": "minecraft:magenta_carpet", - "id": -598 - }, - { - "name": "minecraft:magenta_dye", - "id": 410 - }, - { - "name": "minecraft:magenta_glazed_terracotta", - "id": 222 - }, - { - "name": "minecraft:magenta_wool", - "id": -565 - }, - { - "name": "minecraft:magma", - "id": 213 - }, - { - "name": "minecraft:magma_cream", - "id": 432 - }, - { - "name": "minecraft:magma_cube_spawn_egg", - "id": 457 - }, - { - "name": "minecraft:mangrove_boat", - "id": 642 - }, - { - "name": "minecraft:mangrove_button", - "id": -487 - }, - { - "name": "minecraft:mangrove_chest_boat", - "id": 651 - }, - { - "name": "minecraft:mangrove_door", - "id": 640 - }, - { - "name": "minecraft:mangrove_double_slab", - "id": -499 - }, - { - "name": "minecraft:mangrove_fence", - "id": -491 - }, - { - "name": "minecraft:mangrove_fence_gate", - "id": -492 - }, - { - "name": "minecraft:mangrove_hanging_sign", - "id": -508 - }, - { - "name": "minecraft:mangrove_leaves", - "id": -472 - }, - { - "name": "minecraft:mangrove_log", - "id": -484 - }, - { - "name": "minecraft:mangrove_planks", - "id": -486 - }, - { - "name": "minecraft:mangrove_pressure_plate", - "id": -490 - }, - { - "name": "minecraft:mangrove_propagule", - "id": -474 - }, - { - "name": "minecraft:mangrove_roots", - "id": -482 - }, - { - "name": "minecraft:mangrove_sign", - "id": 641 - }, - { - "name": "minecraft:mangrove_slab", - "id": -489 - }, - { - "name": "minecraft:mangrove_stairs", - "id": -488 - }, - { - "name": "minecraft:mangrove_standing_sign", - "id": -494 - }, - { - "name": "minecraft:mangrove_trapdoor", - "id": -496 - }, - { - "name": "minecraft:mangrove_wall_sign", - "id": -495 - }, - { - "name": "minecraft:mangrove_wood", - "id": -497 - }, - { - "name": "minecraft:medicine", - "id": 606 - }, - { - "name": "minecraft:medium_amethyst_bud", - "id": -331 - }, - { - "name": "minecraft:melon_block", - "id": 103 - }, - { - "name": "minecraft:melon_seeds", - "id": 293 - }, - { - "name": "minecraft:melon_slice", - "id": 272 - }, - { - "name": "minecraft:melon_stem", - "id": 105 - }, - { - "name": "minecraft:milk_bucket", - "id": 363 - }, - { - "name": "minecraft:minecart", - "id": 372 - }, - { - "name": "minecraft:miner_pottery_sherd", - "id": 675 - }, - { - "name": "minecraft:mob_spawner", - "id": 52 - }, - { - "name": "minecraft:mojang_banner_pattern", - "id": 591 - }, - { - "name": "minecraft:monster_egg", - "id": 97 - }, - { - "name": "minecraft:mooshroom_spawn_egg", - "id": 442 - }, - { - "name": "minecraft:moss_block", - "id": -320 - }, - { - "name": "minecraft:moss_carpet", - "id": -335 - }, - { - "name": "minecraft:mossy_cobblestone", - "id": 48 - }, - { - "name": "minecraft:mossy_cobblestone_stairs", - "id": -179 - }, - { - "name": "minecraft:mossy_stone_brick_stairs", - "id": -175 - }, - { - "name": "minecraft:mourner_pottery_sherd", - "id": 676 - }, - { - "name": "minecraft:moving_block", - "id": 250 - }, - { - "name": "minecraft:mud", - "id": -473 - }, - { - "name": "minecraft:mud_brick_double_slab", - "id": -479 - }, - { - "name": "minecraft:mud_brick_slab", - "id": -478 - }, - { - "name": "minecraft:mud_brick_stairs", - "id": -480 - }, - { - "name": "minecraft:mud_brick_wall", - "id": -481 - }, - { - "name": "minecraft:mud_bricks", - "id": -475 - }, - { - "name": "minecraft:muddy_mangrove_roots", - "id": -483 - }, - { - "name": "minecraft:mule_spawn_egg", - "id": 468 - }, - { - "name": "minecraft:mushroom_stew", - "id": 260 - }, - { - "name": "minecraft:music_disc_11", - "id": 551 - }, - { - "name": "minecraft:music_disc_13", - "id": 541 - }, - { - "name": "minecraft:music_disc_5", - "id": 643 - }, - { - "name": "minecraft:music_disc_blocks", - "id": 543 - }, - { - "name": "minecraft:music_disc_cat", - "id": 542 - }, - { - "name": "minecraft:music_disc_chirp", - "id": 544 - }, - { - "name": "minecraft:music_disc_far", - "id": 545 - }, - { - "name": "minecraft:music_disc_mall", - "id": 546 - }, - { - "name": "minecraft:music_disc_mellohi", - "id": 547 - }, - { - "name": "minecraft:music_disc_otherside", - "id": 633 - }, - { - "name": "minecraft:music_disc_pigstep", - "id": 627 - }, - { - "name": "minecraft:music_disc_relic", - "id": 701 - }, - { - "name": "minecraft:music_disc_stal", - "id": 548 - }, - { - "name": "minecraft:music_disc_strad", - "id": 549 - }, - { - "name": "minecraft:music_disc_wait", - "id": 552 - }, - { - "name": "minecraft:music_disc_ward", - "id": 550 - }, - { - "name": "minecraft:mutton", - "id": 557 - }, - { - "name": "minecraft:mycelium", - "id": 110 - }, - { - "name": "minecraft:name_tag", - "id": 555 - }, - { - "name": "minecraft:nautilus_shell", - "id": 577 - }, - { - "name": "minecraft:nether_brick", - "id": 112 - }, - { - "name": "minecraft:nether_brick_fence", - "id": 113 - }, - { - "name": "minecraft:nether_brick_stairs", - "id": 114 - }, - { - "name": "minecraft:nether_gold_ore", - "id": -288 - }, - { - "name": "minecraft:nether_sprouts", - "id": 628 - }, - { - "name": "minecraft:nether_star", - "id": 525 - }, - { - "name": "minecraft:nether_wart", - "id": 294 - }, - { - "name": "minecraft:nether_wart_block", - "id": 214 - }, - { - "name": "minecraft:netherbrick", - "id": 530 - }, - { - "name": "minecraft:netherite_axe", - "id": 613 - }, - { - "name": "minecraft:netherite_block", - "id": -270 - }, - { - "name": "minecraft:netherite_boots", - "id": 619 - }, - { - "name": "minecraft:netherite_chestplate", - "id": 617 - }, - { - "name": "minecraft:netherite_helmet", - "id": 616 - }, - { - "name": "minecraft:netherite_hoe", - "id": 614 - }, - { - "name": "minecraft:netherite_ingot", - "id": 615 - }, - { - "name": "minecraft:netherite_leggings", - "id": 618 - }, - { - "name": "minecraft:netherite_pickaxe", - "id": 612 - }, - { - "name": "minecraft:netherite_scrap", - "id": 620 - }, - { - "name": "minecraft:netherite_shovel", - "id": 611 - }, - { - "name": "minecraft:netherite_sword", - "id": 610 - }, - { - "name": "minecraft:netherite_upgrade_smithing_template", - "id": 684 - }, - { - "name": "minecraft:netherrack", - "id": 87 - }, - { - "name": "minecraft:netherreactor", - "id": 247 - }, - { - "name": "minecraft:normal_stone_stairs", - "id": -180 - }, - { - "name": "minecraft:noteblock", - "id": 25 - }, - { - "name": "minecraft:npc_spawn_egg", - "id": 472 - }, - { - "name": "minecraft:oak_boat", - "id": 377 - }, - { - "name": "minecraft:oak_chest_boat", - "id": 645 - }, - { - "name": "minecraft:oak_fence", - "id": 85 - }, - { - "name": "minecraft:oak_hanging_sign", - "id": -500 - }, - { - "name": "minecraft:oak_log", - "id": 17 - }, - { - "name": "minecraft:oak_sign", - "id": 360 - }, - { - "name": "minecraft:oak_stairs", - "id": 53 - }, - { - "name": "minecraft:observer", - "id": 251 - }, - { - "name": "minecraft:obsidian", - "id": 49 - }, - { - "name": "minecraft:ocelot_spawn_egg", - "id": 453 - }, - { - "name": "minecraft:ochre_froglight", - "id": -471 - }, - { - "name": "minecraft:orange_candle", - "id": -414 - }, - { - "name": "minecraft:orange_candle_cake", - "id": -431 - }, - { - "name": "minecraft:orange_carpet", - "id": -597 - }, - { - "name": "minecraft:orange_dye", - "id": 411 - }, - { - "name": "minecraft:orange_glazed_terracotta", - "id": 221 - }, - { - "name": "minecraft:orange_wool", - "id": -557 - }, - { - "name": "minecraft:oxidized_copper", - "id": -343 - }, - { - "name": "minecraft:oxidized_cut_copper", - "id": -350 - }, - { - "name": "minecraft:oxidized_cut_copper_slab", - "id": -364 - }, - { - "name": "minecraft:oxidized_cut_copper_stairs", - "id": -357 - }, - { - "name": "minecraft:oxidized_double_cut_copper_slab", - "id": -371 - }, - { - "name": "minecraft:packed_ice", - "id": 174 - }, - { - "name": "minecraft:packed_mud", - "id": -477 - }, - { - "name": "minecraft:painting", - "id": 359 - }, - { - "name": "minecraft:panda_spawn_egg", - "id": 491 - }, - { - "name": "minecraft:paper", - "id": 388 - }, - { - "name": "minecraft:parrot_spawn_egg", - "id": 480 - }, - { - "name": "minecraft:pearlescent_froglight", - "id": -469 - }, - { - "name": "minecraft:phantom_membrane", - "id": 581 - }, - { - "name": "minecraft:phantom_spawn_egg", - "id": 488 - }, - { - "name": "minecraft:pig_spawn_egg", - "id": 439 - }, - { - "name": "minecraft:piglin_banner_pattern", - "id": 594 - }, - { - "name": "minecraft:piglin_brute_spawn_egg", - "id": 501 - }, - { - "name": "minecraft:piglin_spawn_egg", - "id": 499 - }, - { - "name": "minecraft:pillager_spawn_egg", - "id": 493 - }, - { - "name": "minecraft:pink_candle", - "id": -419 - }, - { - "name": "minecraft:pink_candle_cake", - "id": -436 - }, - { - "name": "minecraft:pink_carpet", - "id": -602 - }, - { - "name": "minecraft:pink_dye", - "id": 406 - }, - { - "name": "minecraft:pink_glazed_terracotta", - "id": 226 - }, - { - "name": "minecraft:pink_petals", - "id": -549 - }, - { - "name": "minecraft:pink_wool", - "id": -566 - }, - { - "name": "minecraft:piston", - "id": 33 - }, - { - "name": "minecraft:piston_arm_collision", - "id": 34 - }, - { - "name": "minecraft:pitcher_crop", - "id": -574 - }, - { - "name": "minecraft:pitcher_plant", - "id": -612 - }, - { - "name": "minecraft:pitcher_pod", - "id": 297 - }, - { - "name": "minecraft:planks", - "id": 5 - }, - { - "name": "minecraft:plenty_pottery_sherd", - "id": 677 - }, - { - "name": "minecraft:podzol", - "id": 243 - }, - { - "name": "minecraft:pointed_dripstone", - "id": -308 - }, - { - "name": "minecraft:poisonous_potato", - "id": 282 - }, - { - "name": "minecraft:polar_bear_spawn_egg", - "id": 474 - }, - { - "name": "minecraft:polished_andesite_stairs", - "id": -174 - }, - { - "name": "minecraft:polished_basalt", - "id": -235 - }, - { - "name": "minecraft:polished_blackstone", - "id": -291 - }, - { - "name": "minecraft:polished_blackstone_brick_double_slab", - "id": -285 - }, - { - "name": "minecraft:polished_blackstone_brick_slab", - "id": -284 - }, - { - "name": "minecraft:polished_blackstone_brick_stairs", - "id": -275 - }, - { - "name": "minecraft:polished_blackstone_brick_wall", - "id": -278 - }, - { - "name": "minecraft:polished_blackstone_bricks", - "id": -274 - }, - { - "name": "minecraft:polished_blackstone_button", - "id": -296 - }, - { - "name": "minecraft:polished_blackstone_double_slab", - "id": -294 - }, - { - "name": "minecraft:polished_blackstone_pressure_plate", - "id": -295 - }, - { - "name": "minecraft:polished_blackstone_slab", - "id": -293 - }, - { - "name": "minecraft:polished_blackstone_stairs", - "id": -292 - }, - { - "name": "minecraft:polished_blackstone_wall", - "id": -297 - }, - { - "name": "minecraft:polished_deepslate", - "id": -383 - }, - { - "name": "minecraft:polished_deepslate_double_slab", - "id": -397 - }, - { - "name": "minecraft:polished_deepslate_slab", - "id": -384 - }, - { - "name": "minecraft:polished_deepslate_stairs", - "id": -385 - }, - { - "name": "minecraft:polished_deepslate_wall", - "id": -386 - }, - { - "name": "minecraft:polished_diorite_stairs", - "id": -173 - }, - { - "name": "minecraft:polished_granite_stairs", - "id": -172 - }, - { - "name": "minecraft:popped_chorus_fruit", - "id": 566 - }, - { - "name": "minecraft:porkchop", - "id": 262 - }, - { - "name": "minecraft:portal", - "id": 90 - }, - { - "name": "minecraft:potato", - "id": 280 - }, - { - "name": "minecraft:potatoes", - "id": 142 - }, - { - "name": "minecraft:potion", - "id": 428 - }, - { - "name": "minecraft:powder_snow", - "id": -306 - }, - { - "name": "minecraft:powder_snow_bucket", - "id": 370 - }, - { - "name": "minecraft:powered_comparator", - "id": 150 - }, - { - "name": "minecraft:powered_repeater", - "id": 94 - }, - { - "name": "minecraft:prismarine", - "id": 168 - }, - { - "name": "minecraft:prismarine_bricks_stairs", - "id": -4 - }, - { - "name": "minecraft:prismarine_crystals", - "id": 556 - }, - { - "name": "minecraft:prismarine_shard", - "id": 572 - }, - { - "name": "minecraft:prismarine_stairs", - "id": -2 - }, - { - "name": "minecraft:prize_pottery_sherd", - "id": 678 - }, - { - "name": "minecraft:pufferfish", - "id": 267 - }, - { - "name": "minecraft:pufferfish_bucket", - "id": 369 - }, - { - "name": "minecraft:pufferfish_spawn_egg", - "id": 483 - }, - { - "name": "minecraft:pumpkin", - "id": 86 - }, - { - "name": "minecraft:pumpkin_pie", - "id": 284 - }, - { - "name": "minecraft:pumpkin_seeds", - "id": 292 - }, - { - "name": "minecraft:pumpkin_stem", - "id": 104 - }, - { - "name": "minecraft:purple_candle", - "id": -423 - }, - { - "name": "minecraft:purple_candle_cake", - "id": -440 - }, - { - "name": "minecraft:purple_carpet", - "id": -606 - }, - { - "name": "minecraft:purple_dye", - "id": 402 - }, - { - "name": "minecraft:purple_glazed_terracotta", - "id": 219 - }, - { - "name": "minecraft:purple_wool", - "id": -564 - }, - { - "name": "minecraft:purpur_block", - "id": 201 - }, - { - "name": "minecraft:purpur_stairs", - "id": 203 - }, - { - "name": "minecraft:quartz", - "id": 531 - }, - { - "name": "minecraft:quartz_block", - "id": 155 - }, - { - "name": "minecraft:quartz_bricks", - "id": -304 - }, - { - "name": "minecraft:quartz_ore", - "id": 153 - }, - { - "name": "minecraft:quartz_stairs", - "id": 156 - }, - { - "name": "minecraft:rabbit", - "id": 288 - }, - { - "name": "minecraft:rabbit_foot", - "id": 535 - }, - { - "name": "minecraft:rabbit_hide", - "id": 536 - }, - { - "name": "minecraft:rabbit_spawn_egg", - "id": 461 - }, - { - "name": "minecraft:rabbit_stew", - "id": 290 - }, - { - "name": "minecraft:rail", - "id": 66 - }, - { - "name": "minecraft:raiser_armor_trim_smithing_template", - "id": 698 - }, - { - "name": "minecraft:rapid_fertilizer", - "id": 604 - }, - { - "name": "minecraft:ravager_spawn_egg", - "id": 495 - }, - { - "name": "minecraft:raw_copper", - "id": 514 - }, - { - "name": "minecraft:raw_copper_block", - "id": -452 - }, - { - "name": "minecraft:raw_gold", - "id": 513 - }, - { - "name": "minecraft:raw_gold_block", - "id": -453 - }, - { - "name": "minecraft:raw_iron", - "id": 512 - }, - { - "name": "minecraft:raw_iron_block", - "id": -451 - }, - { - "name": "minecraft:recovery_compass", - "id": 653 - }, - { - "name": "minecraft:red_candle", - "id": -427 - }, - { - "name": "minecraft:red_candle_cake", - "id": -444 - }, - { - "name": "minecraft:red_carpet", - "id": -610 - }, - { - "name": "minecraft:red_dye", - "id": 398 - }, - { - "name": "minecraft:red_flower", - "id": 38 - }, - { - "name": "minecraft:red_glazed_terracotta", - "id": 234 - }, - { - "name": "minecraft:red_mushroom", - "id": 40 - }, - { - "name": "minecraft:red_mushroom_block", - "id": 100 - }, - { - "name": "minecraft:red_nether_brick", - "id": 215 - }, - { - "name": "minecraft:red_nether_brick_stairs", - "id": -184 - }, - { - "name": "minecraft:red_sandstone", - "id": 179 - }, - { - "name": "minecraft:red_sandstone_stairs", - "id": 180 - }, - { - "name": "minecraft:red_wool", - "id": -556 - }, - { - "name": "minecraft:redstone", - "id": 375 - }, - { - "name": "minecraft:redstone_block", - "id": 152 - }, - { - "name": "minecraft:redstone_lamp", - "id": 123 - }, - { - "name": "minecraft:redstone_ore", - "id": 73 - }, - { - "name": "minecraft:redstone_torch", - "id": 76 - }, - { - "name": "minecraft:redstone_wire", - "id": 55 - }, - { - "name": "minecraft:reinforced_deepslate", - "id": -466 - }, - { - "name": "minecraft:repeater", - "id": 421 - }, - { - "name": "minecraft:repeating_command_block", - "id": 188 - }, - { - "name": "minecraft:reserved6", - "id": 255 - }, - { - "name": "minecraft:respawn_anchor", - "id": -272 - }, - { - "name": "minecraft:rib_armor_trim_smithing_template", - "id": 694 - }, - { - "name": "minecraft:rotten_flesh", - "id": 277 - }, - { - "name": "minecraft:saddle", - "id": 373 - }, - { - "name": "minecraft:salmon", - "id": 265 - }, - { - "name": "minecraft:salmon_bucket", - "id": 367 - }, - { - "name": "minecraft:salmon_spawn_egg", - "id": 484 - }, - { - "name": "minecraft:sand", - "id": 12 - }, - { - "name": "minecraft:sandstone", - "id": 24 - }, - { - "name": "minecraft:sandstone_stairs", - "id": 128 - }, - { - "name": "minecraft:sapling", - "id": 6 - }, - { - "name": "minecraft:scaffolding", - "id": -165 - }, - { - "name": "minecraft:sculk", - "id": -458 - }, - { - "name": "minecraft:sculk_catalyst", - "id": -460 - }, - { - "name": "minecraft:sculk_sensor", - "id": -307 - }, - { - "name": "minecraft:sculk_shrieker", - "id": -461 - }, - { - "name": "minecraft:sculk_vein", - "id": -459 - }, - { - "name": "minecraft:scute", - "id": 579 - }, - { - "name": "minecraft:sea_lantern", - "id": 169 - }, - { - "name": "minecraft:sea_pickle", - "id": -156 - }, - { - "name": "minecraft:seagrass", - "id": -130 - }, - { - "name": "minecraft:sentry_armor_trim_smithing_template", - "id": 685 - }, - { - "name": "minecraft:shaper_armor_trim_smithing_template", - "id": 699 - }, - { - "name": "minecraft:sheaf_pottery_sherd", - "id": 679 - }, - { - "name": "minecraft:shears", - "id": 423 - }, - { - "name": "minecraft:sheep_spawn_egg", - "id": 440 - }, - { - "name": "minecraft:shelter_pottery_sherd", - "id": 680 - }, - { - "name": "minecraft:shield", - "id": 357 - }, - { - "name": "minecraft:shroomlight", - "id": -230 - }, - { - "name": "minecraft:shulker_box", - "id": 218 - }, - { - "name": "minecraft:shulker_shell", - "id": 573 - }, - { - "name": "minecraft:shulker_spawn_egg", - "id": 471 - }, - { - "name": "minecraft:silence_armor_trim_smithing_template", - "id": 696 - }, - { - "name": "minecraft:silver_glazed_terracotta", - "id": 228 - }, - { - "name": "minecraft:silverfish_spawn_egg", - "id": 445 - }, - { - "name": "minecraft:skeleton_horse_spawn_egg", - "id": 469 - }, - { - "name": "minecraft:skeleton_spawn_egg", - "id": 446 - }, - { - "name": "minecraft:skull", - "id": 523 - }, - { - "name": "minecraft:skull_banner_pattern", - "id": 590 - }, - { - "name": "minecraft:skull_pottery_sherd", - "id": 681 - }, - { - "name": "minecraft:slime", - "id": 165 - }, - { - "name": "minecraft:slime_ball", - "id": 390 - }, - { - "name": "minecraft:slime_spawn_egg", - "id": 447 - }, - { - "name": "minecraft:small_amethyst_bud", - "id": -332 - }, - { - "name": "minecraft:small_dripleaf_block", - "id": -336 - }, - { - "name": "minecraft:smithing_table", - "id": -202 - }, - { - "name": "minecraft:smoker", - "id": -198 - }, - { - "name": "minecraft:smooth_basalt", - "id": -377 - }, - { - "name": "minecraft:smooth_quartz_stairs", - "id": -185 - }, - { - "name": "minecraft:smooth_red_sandstone_stairs", - "id": -176 - }, - { - "name": "minecraft:smooth_sandstone_stairs", - "id": -177 - }, - { - "name": "minecraft:smooth_stone", - "id": -183 - }, - { - "name": "minecraft:sniffer_egg", - "id": -596 - }, - { - "name": "minecraft:sniffer_spawn_egg", - "id": 502 - }, - { - "name": "minecraft:snort_pottery_sherd", - "id": 682 - }, - { - "name": "minecraft:snout_armor_trim_smithing_template", - "id": 693 - }, - { - "name": "minecraft:snow", - "id": 80 - }, - { - "name": "minecraft:snow_golem_spawn_egg", - "id": 507 - }, - { - "name": "minecraft:snow_layer", - "id": 78 - }, - { - "name": "minecraft:snowball", - "id": 376 - }, - { - "name": "minecraft:soul_campfire", - "id": 629 - }, - { - "name": "minecraft:soul_fire", - "id": -237 - }, - { - "name": "minecraft:soul_lantern", - "id": -269 - }, - { - "name": "minecraft:soul_sand", - "id": 88 - }, - { - "name": "minecraft:soul_soil", - "id": -236 - }, - { - "name": "minecraft:soul_torch", - "id": -268 - }, - { - "name": "minecraft:sparkler", - "id": 607 - }, - { - "name": "minecraft:spawn_egg", - "id": 711 - }, - { - "name": "minecraft:spider_eye", - "id": 278 - }, - { - "name": "minecraft:spider_spawn_egg", - "id": 448 - }, - { - "name": "minecraft:spire_armor_trim_smithing_template", - "id": 695 - }, - { - "name": "minecraft:splash_potion", - "id": 568 - }, - { - "name": "minecraft:sponge", - "id": 19 - }, - { - "name": "minecraft:spore_blossom", - "id": -321 - }, - { - "name": "minecraft:spruce_boat", - "id": 380 - }, - { - "name": "minecraft:spruce_button", - "id": -144 - }, - { - "name": "minecraft:spruce_chest_boat", - "id": 648 - }, - { - "name": "minecraft:spruce_door", - "id": 560 - }, - { - "name": "minecraft:spruce_fence", - "id": -579 - }, - { - "name": "minecraft:spruce_fence_gate", - "id": 183 - }, - { - "name": "minecraft:spruce_hanging_sign", - "id": -501 - }, - { - "name": "minecraft:spruce_log", - "id": -569 - }, - { - "name": "minecraft:spruce_pressure_plate", - "id": -154 - }, - { - "name": "minecraft:spruce_sign", - "id": 583 - }, - { - "name": "minecraft:spruce_stairs", - "id": 134 - }, - { - "name": "minecraft:spruce_standing_sign", - "id": -181 - }, - { - "name": "minecraft:spruce_trapdoor", - "id": -149 - }, - { - "name": "minecraft:spruce_wall_sign", - "id": -182 - }, - { - "name": "minecraft:spyglass", - "id": 632 - }, - { - "name": "minecraft:squid_spawn_egg", - "id": 452 - }, - { - "name": "minecraft:stained_glass", - "id": 241 - }, - { - "name": "minecraft:stained_glass_pane", - "id": 160 - }, - { - "name": "minecraft:stained_hardened_clay", - "id": 159 - }, - { - "name": "minecraft:standing_banner", - "id": 176 - }, - { - "name": "minecraft:standing_sign", - "id": 63 - }, - { - "name": "minecraft:stick", - "id": 322 - }, - { - "name": "minecraft:sticky_piston", - "id": 29 - }, - { - "name": "minecraft:sticky_piston_arm_collision", - "id": -217 - }, - { - "name": "minecraft:stone", - "id": 1 - }, - { - "name": "minecraft:stone_axe", - "id": 317 - }, - { - "name": "minecraft:stone_block_slab", - "id": 44 - }, - { - "name": "minecraft:stone_block_slab2", - "id": 182 - }, - { - "name": "minecraft:stone_block_slab3", - "id": -162 - }, - { - "name": "minecraft:stone_block_slab4", - "id": -166 - }, - { - "name": "minecraft:stone_brick_stairs", - "id": 109 - }, - { - "name": "minecraft:stone_button", - "id": 77 - }, - { - "name": "minecraft:stone_hoe", - "id": 332 - }, - { - "name": "minecraft:stone_pickaxe", - "id": 316 - }, - { - "name": "minecraft:stone_pressure_plate", - "id": 70 - }, - { - "name": "minecraft:stone_shovel", - "id": 315 - }, - { - "name": "minecraft:stone_stairs", - "id": 67 - }, - { - "name": "minecraft:stone_sword", - "id": 314 - }, - { - "name": "minecraft:stonebrick", - "id": 98 - }, - { - "name": "minecraft:stonecutter", - "id": 245 - }, - { - "name": "minecraft:stonecutter_block", - "id": -197 - }, - { - "name": "minecraft:stray_spawn_egg", - "id": 464 - }, - { - "name": "minecraft:strider_spawn_egg", - "id": 497 - }, - { - "name": "minecraft:string", - "id": 328 - }, - { - "name": "minecraft:stripped_acacia_log", - "id": -8 - }, - { - "name": "minecraft:stripped_bamboo_block", - "id": -528 - }, - { - "name": "minecraft:stripped_birch_log", - "id": -6 - }, - { - "name": "minecraft:stripped_cherry_log", - "id": -535 - }, - { - "name": "minecraft:stripped_cherry_wood", - "id": -545 - }, - { - "name": "minecraft:stripped_crimson_hyphae", - "id": -300 - }, - { - "name": "minecraft:stripped_crimson_stem", - "id": -240 - }, - { - "name": "minecraft:stripped_dark_oak_log", - "id": -9 - }, - { - "name": "minecraft:stripped_jungle_log", - "id": -7 - }, - { - "name": "minecraft:stripped_mangrove_log", - "id": -485 - }, - { - "name": "minecraft:stripped_mangrove_wood", - "id": -498 - }, - { - "name": "minecraft:stripped_oak_log", - "id": -10 - }, - { - "name": "minecraft:stripped_spruce_log", - "id": -5 - }, - { - "name": "minecraft:stripped_warped_hyphae", - "id": -301 - }, - { - "name": "minecraft:stripped_warped_stem", - "id": -241 - }, - { - "name": "minecraft:structure_block", - "id": 252 - }, - { - "name": "minecraft:structure_void", - "id": 217 - }, - { - "name": "minecraft:sugar", - "id": 418 - }, - { - "name": "minecraft:sugar_cane", - "id": 387 - }, - { - "name": "minecraft:suspicious_gravel", - "id": -573 - }, - { - "name": "minecraft:suspicious_sand", - "id": -529 - }, - { - "name": "minecraft:suspicious_stew", - "id": 597 - }, - { - "name": "minecraft:sweet_berries", - "id": 287 - }, - { - "name": "minecraft:sweet_berry_bush", - "id": -207 - }, - { - "name": "minecraft:tadpole_bucket", - "id": 637 - }, - { - "name": "minecraft:tadpole_spawn_egg", - "id": 636 - }, - { - "name": "minecraft:tallgrass", - "id": 31 - }, - { - "name": "minecraft:target", - "id": -239 - }, - { - "name": "minecraft:tide_armor_trim_smithing_template", - "id": 692 - }, - { - "name": "minecraft:tinted_glass", - "id": -334 - }, - { - "name": "minecraft:tnt", - "id": 46 - }, - { - "name": "minecraft:tnt_minecart", - "id": 532 - }, - { - "name": "minecraft:torch", - "id": 50 - }, - { - "name": "minecraft:torchflower", - "id": -568 - }, - { - "name": "minecraft:torchflower_crop", - "id": -567 - }, - { - "name": "minecraft:torchflower_seeds", - "id": 296 - }, - { - "name": "minecraft:totem_of_undying", - "id": 575 - }, - { - "name": "minecraft:trader_llama_spawn_egg", - "id": 655 - }, - { - "name": "minecraft:trapdoor", - "id": 96 - }, - { - "name": "minecraft:trapped_chest", - "id": 146 - }, - { - "name": "minecraft:trident", - "id": 553 - }, - { - "name": "minecraft:trip_wire", - "id": 132 - }, - { - "name": "minecraft:tripwire_hook", - "id": 131 - }, - { - "name": "minecraft:tropical_fish", - "id": 266 - }, - { - "name": "minecraft:tropical_fish_bucket", - "id": 368 - }, - { - "name": "minecraft:tropical_fish_spawn_egg", - "id": 481 - }, - { - "name": "minecraft:tube_coral", - "id": -131 - }, - { - "name": "minecraft:tuff", - "id": -333 - }, - { - "name": "minecraft:turtle_egg", - "id": -159 - }, - { - "name": "minecraft:turtle_helmet", - "id": 580 - }, - { - "name": "minecraft:turtle_spawn_egg", - "id": 487 - }, - { - "name": "minecraft:twisting_vines", - "id": -287 - }, - { - "name": "minecraft:underwater_torch", - "id": 239 - }, - { - "name": "minecraft:undyed_shulker_box", - "id": 205 - }, - { - "name": "minecraft:unknown", - "id": -305 - }, - { - "name": "minecraft:unlit_redstone_torch", - "id": 75 - }, - { - "name": "minecraft:unpowered_comparator", - "id": 149 - }, - { - "name": "minecraft:unpowered_repeater", - "id": 93 - }, - { - "name": "minecraft:verdant_froglight", - "id": -470 - }, - { - "name": "minecraft:vex_armor_trim_smithing_template", - "id": 691 - }, - { - "name": "minecraft:vex_spawn_egg", - "id": 478 - }, - { - "name": "minecraft:villager_spawn_egg", - "id": 451 - }, - { - "name": "minecraft:vindicator_spawn_egg", - "id": 476 - }, - { - "name": "minecraft:vine", - "id": 106 - }, - { - "name": "minecraft:wall_banner", - "id": 177 - }, - { - "name": "minecraft:wall_sign", - "id": 68 - }, - { - "name": "minecraft:wandering_trader_spawn_egg", - "id": 494 - }, - { - "name": "minecraft:ward_armor_trim_smithing_template", - "id": 689 - }, - { - "name": "minecraft:warden_spawn_egg", - "id": 639 - }, - { - "name": "minecraft:warped_button", - "id": -261 - }, - { - "name": "minecraft:warped_door", - "id": 624 - }, - { - "name": "minecraft:warped_double_slab", - "id": -267 - }, - { - "name": "minecraft:warped_fence", - "id": -257 - }, - { - "name": "minecraft:warped_fence_gate", - "id": -259 - }, - { - "name": "minecraft:warped_fungus", - "id": -229 - }, - { - "name": "minecraft:warped_fungus_on_a_stick", - "id": 625 - }, - { - "name": "minecraft:warped_hanging_sign", - "id": -507 - }, - { - "name": "minecraft:warped_hyphae", - "id": -298 - }, - { - "name": "minecraft:warped_nylium", - "id": -233 - }, - { - "name": "minecraft:warped_planks", - "id": -243 - }, - { - "name": "minecraft:warped_pressure_plate", - "id": -263 - }, - { - "name": "minecraft:warped_roots", - "id": -224 - }, - { - "name": "minecraft:warped_sign", - "id": 622 - }, - { - "name": "minecraft:warped_slab", - "id": -265 - }, - { - "name": "minecraft:warped_stairs", - "id": -255 - }, - { - "name": "minecraft:warped_standing_sign", - "id": -251 - }, - { - "name": "minecraft:warped_stem", - "id": -226 - }, - { - "name": "minecraft:warped_trapdoor", - "id": -247 - }, - { - "name": "minecraft:warped_wall_sign", - "id": -253 - }, - { - "name": "minecraft:warped_wart_block", - "id": -227 - }, - { - "name": "minecraft:water", - "id": 9 - }, - { - "name": "minecraft:water_bucket", - "id": 364 - }, - { - "name": "minecraft:waterlily", - "id": 111 - }, - { - "name": "minecraft:waxed_copper", - "id": -344 - }, - { - "name": "minecraft:waxed_cut_copper", - "id": -351 - }, - { - "name": "minecraft:waxed_cut_copper_slab", - "id": -365 - }, - { - "name": "minecraft:waxed_cut_copper_stairs", - "id": -358 - }, - { - "name": "minecraft:waxed_double_cut_copper_slab", - "id": -372 - }, - { - "name": "minecraft:waxed_exposed_copper", - "id": -345 - }, - { - "name": "minecraft:waxed_exposed_cut_copper", - "id": -352 - }, - { - "name": "minecraft:waxed_exposed_cut_copper_slab", - "id": -366 - }, - { - "name": "minecraft:waxed_exposed_cut_copper_stairs", - "id": -359 - }, - { - "name": "minecraft:waxed_exposed_double_cut_copper_slab", - "id": -373 - }, - { - "name": "minecraft:waxed_oxidized_copper", - "id": -446 - }, - { - "name": "minecraft:waxed_oxidized_cut_copper", - "id": -447 - }, - { - "name": "minecraft:waxed_oxidized_cut_copper_slab", - "id": -449 - }, - { - "name": "minecraft:waxed_oxidized_cut_copper_stairs", - "id": -448 - }, - { - "name": "minecraft:waxed_oxidized_double_cut_copper_slab", - "id": -450 - }, - { - "name": "minecraft:waxed_weathered_copper", - "id": -346 - }, - { - "name": "minecraft:waxed_weathered_cut_copper", - "id": -353 - }, - { - "name": "minecraft:waxed_weathered_cut_copper_slab", - "id": -367 - }, - { - "name": "minecraft:waxed_weathered_cut_copper_stairs", - "id": -360 - }, - { - "name": "minecraft:waxed_weathered_double_cut_copper_slab", - "id": -374 - }, - { - "name": "minecraft:wayfinder_armor_trim_smithing_template", - "id": 697 - }, - { - "name": "minecraft:weathered_copper", - "id": -342 - }, - { - "name": "minecraft:weathered_cut_copper", - "id": -349 - }, - { - "name": "minecraft:weathered_cut_copper_slab", - "id": -363 - }, - { - "name": "minecraft:weathered_cut_copper_stairs", - "id": -356 - }, - { - "name": "minecraft:weathered_double_cut_copper_slab", - "id": -370 - }, - { - "name": "minecraft:web", - "id": 30 - }, - { - "name": "minecraft:weeping_vines", - "id": -231 - }, - { - "name": "minecraft:wheat", - "id": 336 - }, - { - "name": "minecraft:wheat_seeds", - "id": 291 - }, - { - "name": "minecraft:white_candle", - "id": -413 - }, - { - "name": "minecraft:white_candle_cake", - "id": -430 - }, - { - "name": "minecraft:white_carpet", - "id": 171 - }, - { - "name": "minecraft:white_dye", - "id": 412 - }, - { - "name": "minecraft:white_glazed_terracotta", - "id": 220 - }, - { - "name": "minecraft:white_wool", - "id": 35 - }, - { - "name": "minecraft:wild_armor_trim_smithing_template", - "id": 688 - }, - { - "name": "minecraft:witch_spawn_egg", - "id": 454 - }, - { - "name": "minecraft:wither_rose", - "id": -216 - }, - { - "name": "minecraft:wither_skeleton_spawn_egg", - "id": 466 - }, - { - "name": "minecraft:wither_spawn_egg", - "id": 509 - }, - { - "name": "minecraft:wolf_spawn_egg", - "id": 441 - }, - { - "name": "minecraft:wood", - "id": -212 - }, - { - "name": "minecraft:wooden_axe", - "id": 313 - }, - { - "name": "minecraft:wooden_button", - "id": 143 - }, - { - "name": "minecraft:wooden_door", - "id": 361 - }, - { - "name": "minecraft:wooden_hoe", - "id": 331 - }, - { - "name": "minecraft:wooden_pickaxe", - "id": 312 - }, - { - "name": "minecraft:wooden_pressure_plate", - "id": 72 - }, - { - "name": "minecraft:wooden_shovel", - "id": 311 - }, - { - "name": "minecraft:wooden_slab", - "id": 158 - }, - { - "name": "minecraft:wooden_sword", - "id": 310 - }, - { - "name": "minecraft:wool", - "id": 702 - }, - { - "name": "minecraft:writable_book", - "id": 517 - }, - { - "name": "minecraft:written_book", - "id": 518 - }, - { - "name": "minecraft:yellow_candle", - "id": -417 - }, - { - "name": "minecraft:yellow_candle_cake", - "id": -434 - }, - { - "name": "minecraft:yellow_carpet", - "id": -600 - }, - { - "name": "minecraft:yellow_dye", - "id": 408 - }, - { - "name": "minecraft:yellow_flower", - "id": 37 - }, - { - "name": "minecraft:yellow_glazed_terracotta", - "id": 224 - }, - { - "name": "minecraft:yellow_wool", - "id": -558 - }, - { - "name": "minecraft:zoglin_spawn_egg", - "id": 500 - }, - { - "name": "minecraft:zombie_horse_spawn_egg", - "id": 470 - }, - { - "name": "minecraft:zombie_pigman_spawn_egg", - "id": 450 - }, - { - "name": "minecraft:zombie_spawn_egg", - "id": 449 - }, - { - "name": "minecraft:zombie_villager_spawn_egg", - "id": 479 - } -] \ No newline at end of file diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_20_10.json b/core/src/main/resources/bedrock/runtime_item_states.1_20_10.json deleted file mode 100644 index 3625f3045..000000000 --- a/core/src/main/resources/bedrock/runtime_item_states.1_20_10.json +++ /dev/null @@ -1,5314 +0,0 @@ -[ - { - "name": "minecraft:acacia_boat", - "id": 381 - }, - { - "name": "minecraft:acacia_button", - "id": -140 - }, - { - "name": "minecraft:acacia_chest_boat", - "id": 649 - }, - { - "name": "minecraft:acacia_door", - "id": 563 - }, - { - "name": "minecraft:acacia_fence", - "id": -575 - }, - { - "name": "minecraft:acacia_fence_gate", - "id": 187 - }, - { - "name": "minecraft:acacia_hanging_sign", - "id": -504 - }, - { - "name": "minecraft:acacia_log", - "id": 162 - }, - { - "name": "minecraft:acacia_pressure_plate", - "id": -150 - }, - { - "name": "minecraft:acacia_sign", - "id": 586 - }, - { - "name": "minecraft:acacia_stairs", - "id": 163 - }, - { - "name": "minecraft:acacia_standing_sign", - "id": -190 - }, - { - "name": "minecraft:acacia_trapdoor", - "id": -145 - }, - { - "name": "minecraft:acacia_wall_sign", - "id": -191 - }, - { - "name": "minecraft:activator_rail", - "id": 126 - }, - { - "name": "minecraft:agent_spawn_egg", - "id": 489 - }, - { - "name": "minecraft:air", - "id": -158 - }, - { - "name": "minecraft:allay_spawn_egg", - "id": 638 - }, - { - "name": "minecraft:allow", - "id": 210 - }, - { - "name": "minecraft:amethyst_block", - "id": -327 - }, - { - "name": "minecraft:amethyst_cluster", - "id": -329 - }, - { - "name": "minecraft:amethyst_shard", - "id": 631 - }, - { - "name": "minecraft:ancient_debris", - "id": -271 - }, - { - "name": "minecraft:andesite_stairs", - "id": -171 - }, - { - "name": "minecraft:angler_pottery_sherd", - "id": 663 - }, - { - "name": "minecraft:anvil", - "id": 145 - }, - { - "name": "minecraft:apple", - "id": 257 - }, - { - "name": "minecraft:archer_pottery_sherd", - "id": 664 - }, - { - "name": "minecraft:armor_stand", - "id": 559 - }, - { - "name": "minecraft:arms_up_pottery_sherd", - "id": 665 - }, - { - "name": "minecraft:arrow", - "id": 303 - }, - { - "name": "minecraft:axolotl_bucket", - "id": 371 - }, - { - "name": "minecraft:axolotl_spawn_egg", - "id": 503 - }, - { - "name": "minecraft:azalea", - "id": -337 - }, - { - "name": "minecraft:azalea_leaves", - "id": -324 - }, - { - "name": "minecraft:azalea_leaves_flowered", - "id": -325 - }, - { - "name": "minecraft:baked_potato", - "id": 281 - }, - { - "name": "minecraft:balloon", - "id": 605 - }, - { - "name": "minecraft:bamboo", - "id": -163 - }, - { - "name": "minecraft:bamboo_block", - "id": -527 - }, - { - "name": "minecraft:bamboo_button", - "id": -511 - }, - { - "name": "minecraft:bamboo_chest_raft", - "id": 661 - }, - { - "name": "minecraft:bamboo_door", - "id": -517 - }, - { - "name": "minecraft:bamboo_double_slab", - "id": -521 - }, - { - "name": "minecraft:bamboo_fence", - "id": -515 - }, - { - "name": "minecraft:bamboo_fence_gate", - "id": -516 - }, - { - "name": "minecraft:bamboo_hanging_sign", - "id": -522 - }, - { - "name": "minecraft:bamboo_mosaic", - "id": -509 - }, - { - "name": "minecraft:bamboo_mosaic_double_slab", - "id": -525 - }, - { - "name": "minecraft:bamboo_mosaic_slab", - "id": -524 - }, - { - "name": "minecraft:bamboo_mosaic_stairs", - "id": -523 - }, - { - "name": "minecraft:bamboo_planks", - "id": -510 - }, - { - "name": "minecraft:bamboo_pressure_plate", - "id": -514 - }, - { - "name": "minecraft:bamboo_raft", - "id": 660 - }, - { - "name": "minecraft:bamboo_sapling", - "id": -164 - }, - { - "name": "minecraft:bamboo_sign", - "id": 659 - }, - { - "name": "minecraft:bamboo_slab", - "id": -513 - }, - { - "name": "minecraft:bamboo_stairs", - "id": -512 - }, - { - "name": "minecraft:bamboo_standing_sign", - "id": -518 - }, - { - "name": "minecraft:bamboo_trapdoor", - "id": -520 - }, - { - "name": "minecraft:bamboo_wall_sign", - "id": -519 - }, - { - "name": "minecraft:banner", - "id": 574 - }, - { - "name": "minecraft:banner_pattern", - "id": 712 - }, - { - "name": "minecraft:barrel", - "id": -203 - }, - { - "name": "minecraft:barrier", - "id": -161 - }, - { - "name": "minecraft:basalt", - "id": -234 - }, - { - "name": "minecraft:bat_spawn_egg", - "id": 455 - }, - { - "name": "minecraft:beacon", - "id": 138 - }, - { - "name": "minecraft:bed", - "id": 420 - }, - { - "name": "minecraft:bedrock", - "id": 7 - }, - { - "name": "minecraft:bee_nest", - "id": -218 - }, - { - "name": "minecraft:bee_spawn_egg", - "id": 496 - }, - { - "name": "minecraft:beef", - "id": 273 - }, - { - "name": "minecraft:beehive", - "id": -219 - }, - { - "name": "minecraft:beetroot", - "id": 285 - }, - { - "name": "minecraft:beetroot_seeds", - "id": 295 - }, - { - "name": "minecraft:beetroot_soup", - "id": 286 - }, - { - "name": "minecraft:bell", - "id": -206 - }, - { - "name": "minecraft:big_dripleaf", - "id": -323 - }, - { - "name": "minecraft:birch_boat", - "id": 378 - }, - { - "name": "minecraft:birch_button", - "id": -141 - }, - { - "name": "minecraft:birch_chest_boat", - "id": 646 - }, - { - "name": "minecraft:birch_door", - "id": 561 - }, - { - "name": "minecraft:birch_fence", - "id": -576 - }, - { - "name": "minecraft:birch_fence_gate", - "id": 184 - }, - { - "name": "minecraft:birch_hanging_sign", - "id": -502 - }, - { - "name": "minecraft:birch_log", - "id": -570 - }, - { - "name": "minecraft:birch_pressure_plate", - "id": -151 - }, - { - "name": "minecraft:birch_sign", - "id": 584 - }, - { - "name": "minecraft:birch_stairs", - "id": 135 - }, - { - "name": "minecraft:birch_standing_sign", - "id": -186 - }, - { - "name": "minecraft:birch_trapdoor", - "id": -146 - }, - { - "name": "minecraft:birch_wall_sign", - "id": -187 - }, - { - "name": "minecraft:black_candle", - "id": -428 - }, - { - "name": "minecraft:black_candle_cake", - "id": -445 - }, - { - "name": "minecraft:black_carpet", - "id": -611 - }, - { - "name": "minecraft:black_concrete", - "id": -642 - }, - { - "name": "minecraft:black_dye", - "id": 397 - }, - { - "name": "minecraft:black_glazed_terracotta", - "id": 235 - }, - { - "name": "minecraft:black_shulker_box", - "id": -627 - }, - { - "name": "minecraft:black_wool", - "id": -554 - }, - { - "name": "minecraft:blackstone", - "id": -273 - }, - { - "name": "minecraft:blackstone_double_slab", - "id": -283 - }, - { - "name": "minecraft:blackstone_slab", - "id": -282 - }, - { - "name": "minecraft:blackstone_stairs", - "id": -276 - }, - { - "name": "minecraft:blackstone_wall", - "id": -277 - }, - { - "name": "minecraft:blade_pottery_sherd", - "id": 666 - }, - { - "name": "minecraft:blast_furnace", - "id": -196 - }, - { - "name": "minecraft:blaze_powder", - "id": 431 - }, - { - "name": "minecraft:blaze_rod", - "id": 425 - }, - { - "name": "minecraft:blaze_spawn_egg", - "id": 458 - }, - { - "name": "minecraft:bleach", - "id": 603 - }, - { - "name": "minecraft:blue_candle", - "id": -424 - }, - { - "name": "minecraft:blue_candle_cake", - "id": -441 - }, - { - "name": "minecraft:blue_carpet", - "id": -607 - }, - { - "name": "minecraft:blue_concrete", - "id": -638 - }, - { - "name": "minecraft:blue_dye", - "id": 401 - }, - { - "name": "minecraft:blue_glazed_terracotta", - "id": 231 - }, - { - "name": "minecraft:blue_ice", - "id": -11 - }, - { - "name": "minecraft:blue_shulker_box", - "id": -623 - }, - { - "name": "minecraft:blue_wool", - "id": -563 - }, - { - "name": "minecraft:boat", - "id": 710 - }, - { - "name": "minecraft:bone", - "id": 417 - }, - { - "name": "minecraft:bone_block", - "id": 216 - }, - { - "name": "minecraft:bone_meal", - "id": 413 - }, - { - "name": "minecraft:book", - "id": 389 - }, - { - "name": "minecraft:bookshelf", - "id": 47 - }, - { - "name": "minecraft:border_block", - "id": 212 - }, - { - "name": "minecraft:bordure_indented_banner_pattern", - "id": 593 - }, - { - "name": "minecraft:bow", - "id": 302 - }, - { - "name": "minecraft:bowl", - "id": 323 - }, - { - "name": "minecraft:brain_coral", - "id": -581 - }, - { - "name": "minecraft:bread", - "id": 261 - }, - { - "name": "minecraft:brewer_pottery_sherd", - "id": 667 - }, - { - "name": "minecraft:brewing_stand", - "id": 433 - }, - { - "name": "minecraft:brick", - "id": 385 - }, - { - "name": "minecraft:brick_block", - "id": 45 - }, - { - "name": "minecraft:brick_stairs", - "id": 108 - }, - { - "name": "minecraft:brown_candle", - "id": -425 - }, - { - "name": "minecraft:brown_candle_cake", - "id": -442 - }, - { - "name": "minecraft:brown_carpet", - "id": -608 - }, - { - "name": "minecraft:brown_concrete", - "id": -639 - }, - { - "name": "minecraft:brown_dye", - "id": 400 - }, - { - "name": "minecraft:brown_glazed_terracotta", - "id": 232 - }, - { - "name": "minecraft:brown_mushroom", - "id": 39 - }, - { - "name": "minecraft:brown_mushroom_block", - "id": 99 - }, - { - "name": "minecraft:brown_shulker_box", - "id": -624 - }, - { - "name": "minecraft:brown_wool", - "id": -555 - }, - { - "name": "minecraft:brush", - "id": 683 - }, - { - "name": "minecraft:bubble_column", - "id": -160 - }, - { - "name": "minecraft:bubble_coral", - "id": -582 - }, - { - "name": "minecraft:bucket", - "id": 362 - }, - { - "name": "minecraft:budding_amethyst", - "id": -328 - }, - { - "name": "minecraft:burn_pottery_sherd", - "id": 668 - }, - { - "name": "minecraft:cactus", - "id": 81 - }, - { - "name": "minecraft:cake", - "id": 419 - }, - { - "name": "minecraft:calcite", - "id": -326 - }, - { - "name": "minecraft:calibrated_sculk_sensor", - "id": -580 - }, - { - "name": "minecraft:camel_spawn_egg", - "id": 662 - }, - { - "name": "minecraft:camera", - "id": 600 - }, - { - "name": "minecraft:campfire", - "id": 596 - }, - { - "name": "minecraft:candle", - "id": -412 - }, - { - "name": "minecraft:candle_cake", - "id": -429 - }, - { - "name": "minecraft:carpet", - "id": 703 - }, - { - "name": "minecraft:carrot", - "id": 279 - }, - { - "name": "minecraft:carrot_on_a_stick", - "id": 524 - }, - { - "name": "minecraft:carrots", - "id": 141 - }, - { - "name": "minecraft:cartography_table", - "id": -200 - }, - { - "name": "minecraft:carved_pumpkin", - "id": -155 - }, - { - "name": "minecraft:cat_spawn_egg", - "id": 490 - }, - { - "name": "minecraft:cauldron", - "id": 434 - }, - { - "name": "minecraft:cave_spider_spawn_egg", - "id": 459 - }, - { - "name": "minecraft:cave_vines", - "id": -322 - }, - { - "name": "minecraft:cave_vines_body_with_berries", - "id": -375 - }, - { - "name": "minecraft:cave_vines_head_with_berries", - "id": -376 - }, - { - "name": "minecraft:chain", - "id": 626 - }, - { - "name": "minecraft:chain_command_block", - "id": 189 - }, - { - "name": "minecraft:chainmail_boots", - "id": 344 - }, - { - "name": "minecraft:chainmail_chestplate", - "id": 342 - }, - { - "name": "minecraft:chainmail_helmet", - "id": 341 - }, - { - "name": "minecraft:chainmail_leggings", - "id": 343 - }, - { - "name": "minecraft:charcoal", - "id": 305 - }, - { - "name": "minecraft:chemical_heat", - "id": 192 - }, - { - "name": "minecraft:chemistry_table", - "id": 238 - }, - { - "name": "minecraft:cherry_boat", - "id": 656 - }, - { - "name": "minecraft:cherry_button", - "id": -530 - }, - { - "name": "minecraft:cherry_chest_boat", - "id": 657 - }, - { - "name": "minecraft:cherry_door", - "id": -531 - }, - { - "name": "minecraft:cherry_double_slab", - "id": -540 - }, - { - "name": "minecraft:cherry_fence", - "id": -532 - }, - { - "name": "minecraft:cherry_fence_gate", - "id": -533 - }, - { - "name": "minecraft:cherry_hanging_sign", - "id": -534 - }, - { - "name": "minecraft:cherry_leaves", - "id": -548 - }, - { - "name": "minecraft:cherry_log", - "id": -536 - }, - { - "name": "minecraft:cherry_planks", - "id": -537 - }, - { - "name": "minecraft:cherry_pressure_plate", - "id": -538 - }, - { - "name": "minecraft:cherry_sapling", - "id": -547 - }, - { - "name": "minecraft:cherry_sign", - "id": 658 - }, - { - "name": "minecraft:cherry_slab", - "id": -539 - }, - { - "name": "minecraft:cherry_stairs", - "id": -541 - }, - { - "name": "minecraft:cherry_standing_sign", - "id": -542 - }, - { - "name": "minecraft:cherry_trapdoor", - "id": -543 - }, - { - "name": "minecraft:cherry_wall_sign", - "id": -544 - }, - { - "name": "minecraft:cherry_wood", - "id": -546 - }, - { - "name": "minecraft:chest", - "id": 54 - }, - { - "name": "minecraft:chest_boat", - "id": 652 - }, - { - "name": "minecraft:chest_minecart", - "id": 391 - }, - { - "name": "minecraft:chicken", - "id": 275 - }, - { - "name": "minecraft:chicken_spawn_egg", - "id": 437 - }, - { - "name": "minecraft:chiseled_bookshelf", - "id": -526 - }, - { - "name": "minecraft:chiseled_deepslate", - "id": -395 - }, - { - "name": "minecraft:chiseled_nether_bricks", - "id": -302 - }, - { - "name": "minecraft:chiseled_polished_blackstone", - "id": -279 - }, - { - "name": "minecraft:chorus_flower", - "id": 200 - }, - { - "name": "minecraft:chorus_fruit", - "id": 565 - }, - { - "name": "minecraft:chorus_plant", - "id": 240 - }, - { - "name": "minecraft:clay", - "id": 82 - }, - { - "name": "minecraft:clay_ball", - "id": 386 - }, - { - "name": "minecraft:client_request_placeholder_block", - "id": -465 - }, - { - "name": "minecraft:clock", - "id": 395 - }, - { - "name": "minecraft:coal", - "id": 304 - }, - { - "name": "minecraft:coal_block", - "id": 173 - }, - { - "name": "minecraft:coal_ore", - "id": 16 - }, - { - "name": "minecraft:coast_armor_trim_smithing_template", - "id": 687 - }, - { - "name": "minecraft:cobbled_deepslate", - "id": -379 - }, - { - "name": "minecraft:cobbled_deepslate_double_slab", - "id": -396 - }, - { - "name": "minecraft:cobbled_deepslate_slab", - "id": -380 - }, - { - "name": "minecraft:cobbled_deepslate_stairs", - "id": -381 - }, - { - "name": "minecraft:cobbled_deepslate_wall", - "id": -382 - }, - { - "name": "minecraft:cobblestone", - "id": 4 - }, - { - "name": "minecraft:cobblestone_wall", - "id": 139 - }, - { - "name": "minecraft:cocoa", - "id": 127 - }, - { - "name": "minecraft:cocoa_beans", - "id": 414 - }, - { - "name": "minecraft:cod", - "id": 264 - }, - { - "name": "minecraft:cod_bucket", - "id": 366 - }, - { - "name": "minecraft:cod_spawn_egg", - "id": 482 - }, - { - "name": "minecraft:colored_torch_bp", - "id": 204 - }, - { - "name": "minecraft:colored_torch_rg", - "id": 202 - }, - { - "name": "minecraft:command_block", - "id": 137 - }, - { - "name": "minecraft:command_block_minecart", - "id": 570 - }, - { - "name": "minecraft:comparator", - "id": 529 - }, - { - "name": "minecraft:compass", - "id": 393 - }, - { - "name": "minecraft:composter", - "id": -213 - }, - { - "name": "minecraft:compound", - "id": 601 - }, - { - "name": "minecraft:concrete", - "id": 708 - }, - { - "name": "minecraft:concrete_powder", - "id": 237 - }, - { - "name": "minecraft:conduit", - "id": -157 - }, - { - "name": "minecraft:cooked_beef", - "id": 274 - }, - { - "name": "minecraft:cooked_chicken", - "id": 276 - }, - { - "name": "minecraft:cooked_cod", - "id": 268 - }, - { - "name": "minecraft:cooked_mutton", - "id": 558 - }, - { - "name": "minecraft:cooked_porkchop", - "id": 263 - }, - { - "name": "minecraft:cooked_rabbit", - "id": 289 - }, - { - "name": "minecraft:cooked_salmon", - "id": 269 - }, - { - "name": "minecraft:cookie", - "id": 271 - }, - { - "name": "minecraft:copper_block", - "id": -340 - }, - { - "name": "minecraft:copper_ingot", - "id": 511 - }, - { - "name": "minecraft:copper_ore", - "id": -311 - }, - { - "name": "minecraft:coral", - "id": 706 - }, - { - "name": "minecraft:coral_block", - "id": -132 - }, - { - "name": "minecraft:coral_fan", - "id": -133 - }, - { - "name": "minecraft:coral_fan_dead", - "id": -134 - }, - { - "name": "minecraft:coral_fan_hang", - "id": -135 - }, - { - "name": "minecraft:coral_fan_hang2", - "id": -136 - }, - { - "name": "minecraft:coral_fan_hang3", - "id": -137 - }, - { - "name": "minecraft:cow_spawn_egg", - "id": 438 - }, - { - "name": "minecraft:cracked_deepslate_bricks", - "id": -410 - }, - { - "name": "minecraft:cracked_deepslate_tiles", - "id": -409 - }, - { - "name": "minecraft:cracked_nether_bricks", - "id": -303 - }, - { - "name": "minecraft:cracked_polished_blackstone_bricks", - "id": -280 - }, - { - "name": "minecraft:crafting_table", - "id": 58 - }, - { - "name": "minecraft:creeper_banner_pattern", - "id": 589 - }, - { - "name": "minecraft:creeper_spawn_egg", - "id": 443 - }, - { - "name": "minecraft:crimson_button", - "id": -260 - }, - { - "name": "minecraft:crimson_door", - "id": 623 - }, - { - "name": "minecraft:crimson_double_slab", - "id": -266 - }, - { - "name": "minecraft:crimson_fence", - "id": -256 - }, - { - "name": "minecraft:crimson_fence_gate", - "id": -258 - }, - { - "name": "minecraft:crimson_fungus", - "id": -228 - }, - { - "name": "minecraft:crimson_hanging_sign", - "id": -506 - }, - { - "name": "minecraft:crimson_hyphae", - "id": -299 - }, - { - "name": "minecraft:crimson_nylium", - "id": -232 - }, - { - "name": "minecraft:crimson_planks", - "id": -242 - }, - { - "name": "minecraft:crimson_pressure_plate", - "id": -262 - }, - { - "name": "minecraft:crimson_roots", - "id": -223 - }, - { - "name": "minecraft:crimson_sign", - "id": 621 - }, - { - "name": "minecraft:crimson_slab", - "id": -264 - }, - { - "name": "minecraft:crimson_stairs", - "id": -254 - }, - { - "name": "minecraft:crimson_standing_sign", - "id": -250 - }, - { - "name": "minecraft:crimson_stem", - "id": -225 - }, - { - "name": "minecraft:crimson_trapdoor", - "id": -246 - }, - { - "name": "minecraft:crimson_wall_sign", - "id": -252 - }, - { - "name": "minecraft:crossbow", - "id": 582 - }, - { - "name": "minecraft:crying_obsidian", - "id": -289 - }, - { - "name": "minecraft:cut_copper", - "id": -347 - }, - { - "name": "minecraft:cut_copper_slab", - "id": -361 - }, - { - "name": "minecraft:cut_copper_stairs", - "id": -354 - }, - { - "name": "minecraft:cyan_candle", - "id": -422 - }, - { - "name": "minecraft:cyan_candle_cake", - "id": -439 - }, - { - "name": "minecraft:cyan_carpet", - "id": -605 - }, - { - "name": "minecraft:cyan_concrete", - "id": -636 - }, - { - "name": "minecraft:cyan_dye", - "id": 403 - }, - { - "name": "minecraft:cyan_glazed_terracotta", - "id": 229 - }, - { - "name": "minecraft:cyan_shulker_box", - "id": -621 - }, - { - "name": "minecraft:cyan_wool", - "id": -561 - }, - { - "name": "minecraft:danger_pottery_sherd", - "id": 669 - }, - { - "name": "minecraft:dark_oak_boat", - "id": 382 - }, - { - "name": "minecraft:dark_oak_button", - "id": -142 - }, - { - "name": "minecraft:dark_oak_chest_boat", - "id": 650 - }, - { - "name": "minecraft:dark_oak_door", - "id": 564 - }, - { - "name": "minecraft:dark_oak_fence", - "id": -577 - }, - { - "name": "minecraft:dark_oak_fence_gate", - "id": 186 - }, - { - "name": "minecraft:dark_oak_hanging_sign", - "id": -505 - }, - { - "name": "minecraft:dark_oak_log", - "id": -572 - }, - { - "name": "minecraft:dark_oak_pressure_plate", - "id": -152 - }, - { - "name": "minecraft:dark_oak_sign", - "id": 587 - }, - { - "name": "minecraft:dark_oak_stairs", - "id": 164 - }, - { - "name": "minecraft:dark_oak_trapdoor", - "id": -147 - }, - { - "name": "minecraft:dark_prismarine_stairs", - "id": -3 - }, - { - "name": "minecraft:darkoak_standing_sign", - "id": -192 - }, - { - "name": "minecraft:darkoak_wall_sign", - "id": -193 - }, - { - "name": "minecraft:daylight_detector", - "id": 151 - }, - { - "name": "minecraft:daylight_detector_inverted", - "id": 178 - }, - { - "name": "minecraft:dead_brain_coral", - "id": -586 - }, - { - "name": "minecraft:dead_bubble_coral", - "id": -587 - }, - { - "name": "minecraft:dead_fire_coral", - "id": -588 - }, - { - "name": "minecraft:dead_horn_coral", - "id": -589 - }, - { - "name": "minecraft:dead_tube_coral", - "id": -585 - }, - { - "name": "minecraft:deadbush", - "id": 32 - }, - { - "name": "minecraft:decorated_pot", - "id": -551 - }, - { - "name": "minecraft:deepslate", - "id": -378 - }, - { - "name": "minecraft:deepslate_brick_double_slab", - "id": -399 - }, - { - "name": "minecraft:deepslate_brick_slab", - "id": -392 - }, - { - "name": "minecraft:deepslate_brick_stairs", - "id": -393 - }, - { - "name": "minecraft:deepslate_brick_wall", - "id": -394 - }, - { - "name": "minecraft:deepslate_bricks", - "id": -391 - }, - { - "name": "minecraft:deepslate_coal_ore", - "id": -406 - }, - { - "name": "minecraft:deepslate_copper_ore", - "id": -408 - }, - { - "name": "minecraft:deepslate_diamond_ore", - "id": -405 - }, - { - "name": "minecraft:deepslate_emerald_ore", - "id": -407 - }, - { - "name": "minecraft:deepslate_gold_ore", - "id": -402 - }, - { - "name": "minecraft:deepslate_iron_ore", - "id": -401 - }, - { - "name": "minecraft:deepslate_lapis_ore", - "id": -400 - }, - { - "name": "minecraft:deepslate_redstone_ore", - "id": -403 - }, - { - "name": "minecraft:deepslate_tile_double_slab", - "id": -398 - }, - { - "name": "minecraft:deepslate_tile_slab", - "id": -388 - }, - { - "name": "minecraft:deepslate_tile_stairs", - "id": -389 - }, - { - "name": "minecraft:deepslate_tile_wall", - "id": -390 - }, - { - "name": "minecraft:deepslate_tiles", - "id": -387 - }, - { - "name": "minecraft:deny", - "id": 211 - }, - { - "name": "minecraft:detector_rail", - "id": 28 - }, - { - "name": "minecraft:diamond", - "id": 306 - }, - { - "name": "minecraft:diamond_axe", - "id": 321 - }, - { - "name": "minecraft:diamond_block", - "id": 57 - }, - { - "name": "minecraft:diamond_boots", - "id": 352 - }, - { - "name": "minecraft:diamond_chestplate", - "id": 350 - }, - { - "name": "minecraft:diamond_helmet", - "id": 349 - }, - { - "name": "minecraft:diamond_hoe", - "id": 334 - }, - { - "name": "minecraft:diamond_horse_armor", - "id": 540 - }, - { - "name": "minecraft:diamond_leggings", - "id": 351 - }, - { - "name": "minecraft:diamond_ore", - "id": 56 - }, - { - "name": "minecraft:diamond_pickaxe", - "id": 320 - }, - { - "name": "minecraft:diamond_shovel", - "id": 319 - }, - { - "name": "minecraft:diamond_sword", - "id": 318 - }, - { - "name": "minecraft:diorite_stairs", - "id": -170 - }, - { - "name": "minecraft:dirt", - "id": 3 - }, - { - "name": "minecraft:dirt_with_roots", - "id": -318 - }, - { - "name": "minecraft:disc_fragment_5", - "id": 644 - }, - { - "name": "minecraft:dispenser", - "id": 23 - }, - { - "name": "minecraft:dolphin_spawn_egg", - "id": 486 - }, - { - "name": "minecraft:donkey_spawn_egg", - "id": 467 - }, - { - "name": "minecraft:double_cut_copper_slab", - "id": -368 - }, - { - "name": "minecraft:double_plant", - "id": 175 - }, - { - "name": "minecraft:double_stone_block_slab", - "id": 43 - }, - { - "name": "minecraft:double_stone_block_slab2", - "id": 181 - }, - { - "name": "minecraft:double_stone_block_slab3", - "id": -167 - }, - { - "name": "minecraft:double_stone_block_slab4", - "id": -168 - }, - { - "name": "minecraft:double_wooden_slab", - "id": 157 - }, - { - "name": "minecraft:dragon_breath", - "id": 567 - }, - { - "name": "minecraft:dragon_egg", - "id": 122 - }, - { - "name": "minecraft:dried_kelp", - "id": 270 - }, - { - "name": "minecraft:dried_kelp_block", - "id": -139 - }, - { - "name": "minecraft:dripstone_block", - "id": -317 - }, - { - "name": "minecraft:dropper", - "id": 125 - }, - { - "name": "minecraft:drowned_spawn_egg", - "id": 485 - }, - { - "name": "minecraft:dune_armor_trim_smithing_template", - "id": 686 - }, - { - "name": "minecraft:dye", - "id": 711 - }, - { - "name": "minecraft:echo_shard", - "id": 654 - }, - { - "name": "minecraft:egg", - "id": 392 - }, - { - "name": "minecraft:elder_guardian_spawn_egg", - "id": 473 - }, - { - "name": "minecraft:element_0", - "id": 36 - }, - { - "name": "minecraft:element_1", - "id": -12 - }, - { - "name": "minecraft:element_10", - "id": -21 - }, - { - "name": "minecraft:element_100", - "id": -111 - }, - { - "name": "minecraft:element_101", - "id": -112 - }, - { - "name": "minecraft:element_102", - "id": -113 - }, - { - "name": "minecraft:element_103", - "id": -114 - }, - { - "name": "minecraft:element_104", - "id": -115 - }, - { - "name": "minecraft:element_105", - "id": -116 - }, - { - "name": "minecraft:element_106", - "id": -117 - }, - { - "name": "minecraft:element_107", - "id": -118 - }, - { - "name": "minecraft:element_108", - "id": -119 - }, - { - "name": "minecraft:element_109", - "id": -120 - }, - { - "name": "minecraft:element_11", - "id": -22 - }, - { - "name": "minecraft:element_110", - "id": -121 - }, - { - "name": "minecraft:element_111", - "id": -122 - }, - { - "name": "minecraft:element_112", - "id": -123 - }, - { - "name": "minecraft:element_113", - "id": -124 - }, - { - "name": "minecraft:element_114", - "id": -125 - }, - { - "name": "minecraft:element_115", - "id": -126 - }, - { - "name": "minecraft:element_116", - "id": -127 - }, - { - "name": "minecraft:element_117", - "id": -128 - }, - { - "name": "minecraft:element_118", - "id": -129 - }, - { - "name": "minecraft:element_12", - "id": -23 - }, - { - "name": "minecraft:element_13", - "id": -24 - }, - { - "name": "minecraft:element_14", - "id": -25 - }, - { - "name": "minecraft:element_15", - "id": -26 - }, - { - "name": "minecraft:element_16", - "id": -27 - }, - { - "name": "minecraft:element_17", - "id": -28 - }, - { - "name": "minecraft:element_18", - "id": -29 - }, - { - "name": "minecraft:element_19", - "id": -30 - }, - { - "name": "minecraft:element_2", - "id": -13 - }, - { - "name": "minecraft:element_20", - "id": -31 - }, - { - "name": "minecraft:element_21", - "id": -32 - }, - { - "name": "minecraft:element_22", - "id": -33 - }, - { - "name": "minecraft:element_23", - "id": -34 - }, - { - "name": "minecraft:element_24", - "id": -35 - }, - { - "name": "minecraft:element_25", - "id": -36 - }, - { - "name": "minecraft:element_26", - "id": -37 - }, - { - "name": "minecraft:element_27", - "id": -38 - }, - { - "name": "minecraft:element_28", - "id": -39 - }, - { - "name": "minecraft:element_29", - "id": -40 - }, - { - "name": "minecraft:element_3", - "id": -14 - }, - { - "name": "minecraft:element_30", - "id": -41 - }, - { - "name": "minecraft:element_31", - "id": -42 - }, - { - "name": "minecraft:element_32", - "id": -43 - }, - { - "name": "minecraft:element_33", - "id": -44 - }, - { - "name": "minecraft:element_34", - "id": -45 - }, - { - "name": "minecraft:element_35", - "id": -46 - }, - { - "name": "minecraft:element_36", - "id": -47 - }, - { - "name": "minecraft:element_37", - "id": -48 - }, - { - "name": "minecraft:element_38", - "id": -49 - }, - { - "name": "minecraft:element_39", - "id": -50 - }, - { - "name": "minecraft:element_4", - "id": -15 - }, - { - "name": "minecraft:element_40", - "id": -51 - }, - { - "name": "minecraft:element_41", - "id": -52 - }, - { - "name": "minecraft:element_42", - "id": -53 - }, - { - "name": "minecraft:element_43", - "id": -54 - }, - { - "name": "minecraft:element_44", - "id": -55 - }, - { - "name": "minecraft:element_45", - "id": -56 - }, - { - "name": "minecraft:element_46", - "id": -57 - }, - { - "name": "minecraft:element_47", - "id": -58 - }, - { - "name": "minecraft:element_48", - "id": -59 - }, - { - "name": "minecraft:element_49", - "id": -60 - }, - { - "name": "minecraft:element_5", - "id": -16 - }, - { - "name": "minecraft:element_50", - "id": -61 - }, - { - "name": "minecraft:element_51", - "id": -62 - }, - { - "name": "minecraft:element_52", - "id": -63 - }, - { - "name": "minecraft:element_53", - "id": -64 - }, - { - "name": "minecraft:element_54", - "id": -65 - }, - { - "name": "minecraft:element_55", - "id": -66 - }, - { - "name": "minecraft:element_56", - "id": -67 - }, - { - "name": "minecraft:element_57", - "id": -68 - }, - { - "name": "minecraft:element_58", - "id": -69 - }, - { - "name": "minecraft:element_59", - "id": -70 - }, - { - "name": "minecraft:element_6", - "id": -17 - }, - { - "name": "minecraft:element_60", - "id": -71 - }, - { - "name": "minecraft:element_61", - "id": -72 - }, - { - "name": "minecraft:element_62", - "id": -73 - }, - { - "name": "minecraft:element_63", - "id": -74 - }, - { - "name": "minecraft:element_64", - "id": -75 - }, - { - "name": "minecraft:element_65", - "id": -76 - }, - { - "name": "minecraft:element_66", - "id": -77 - }, - { - "name": "minecraft:element_67", - "id": -78 - }, - { - "name": "minecraft:element_68", - "id": -79 - }, - { - "name": "minecraft:element_69", - "id": -80 - }, - { - "name": "minecraft:element_7", - "id": -18 - }, - { - "name": "minecraft:element_70", - "id": -81 - }, - { - "name": "minecraft:element_71", - "id": -82 - }, - { - "name": "minecraft:element_72", - "id": -83 - }, - { - "name": "minecraft:element_73", - "id": -84 - }, - { - "name": "minecraft:element_74", - "id": -85 - }, - { - "name": "minecraft:element_75", - "id": -86 - }, - { - "name": "minecraft:element_76", - "id": -87 - }, - { - "name": "minecraft:element_77", - "id": -88 - }, - { - "name": "minecraft:element_78", - "id": -89 - }, - { - "name": "minecraft:element_79", - "id": -90 - }, - { - "name": "minecraft:element_8", - "id": -19 - }, - { - "name": "minecraft:element_80", - "id": -91 - }, - { - "name": "minecraft:element_81", - "id": -92 - }, - { - "name": "minecraft:element_82", - "id": -93 - }, - { - "name": "minecraft:element_83", - "id": -94 - }, - { - "name": "minecraft:element_84", - "id": -95 - }, - { - "name": "minecraft:element_85", - "id": -96 - }, - { - "name": "minecraft:element_86", - "id": -97 - }, - { - "name": "minecraft:element_87", - "id": -98 - }, - { - "name": "minecraft:element_88", - "id": -99 - }, - { - "name": "minecraft:element_89", - "id": -100 - }, - { - "name": "minecraft:element_9", - "id": -20 - }, - { - "name": "minecraft:element_90", - "id": -101 - }, - { - "name": "minecraft:element_91", - "id": -102 - }, - { - "name": "minecraft:element_92", - "id": -103 - }, - { - "name": "minecraft:element_93", - "id": -104 - }, - { - "name": "minecraft:element_94", - "id": -105 - }, - { - "name": "minecraft:element_95", - "id": -106 - }, - { - "name": "minecraft:element_96", - "id": -107 - }, - { - "name": "minecraft:element_97", - "id": -108 - }, - { - "name": "minecraft:element_98", - "id": -109 - }, - { - "name": "minecraft:element_99", - "id": -110 - }, - { - "name": "minecraft:elytra", - "id": 571 - }, - { - "name": "minecraft:emerald", - "id": 519 - }, - { - "name": "minecraft:emerald_block", - "id": 133 - }, - { - "name": "minecraft:emerald_ore", - "id": 129 - }, - { - "name": "minecraft:empty_map", - "id": 522 - }, - { - "name": "minecraft:enchanted_book", - "id": 528 - }, - { - "name": "minecraft:enchanted_golden_apple", - "id": 259 - }, - { - "name": "minecraft:enchanting_table", - "id": 116 - }, - { - "name": "minecraft:end_brick_stairs", - "id": -178 - }, - { - "name": "minecraft:end_bricks", - "id": 206 - }, - { - "name": "minecraft:end_crystal", - "id": 714 - }, - { - "name": "minecraft:end_gateway", - "id": 209 - }, - { - "name": "minecraft:end_portal", - "id": 119 - }, - { - "name": "minecraft:end_portal_frame", - "id": 120 - }, - { - "name": "minecraft:end_rod", - "id": 208 - }, - { - "name": "minecraft:end_stone", - "id": 121 - }, - { - "name": "minecraft:ender_chest", - "id": 130 - }, - { - "name": "minecraft:ender_dragon_spawn_egg", - "id": 508 - }, - { - "name": "minecraft:ender_eye", - "id": 435 - }, - { - "name": "minecraft:ender_pearl", - "id": 424 - }, - { - "name": "minecraft:enderman_spawn_egg", - "id": 444 - }, - { - "name": "minecraft:endermite_spawn_egg", - "id": 462 - }, - { - "name": "minecraft:evoker_spawn_egg", - "id": 477 - }, - { - "name": "minecraft:experience_bottle", - "id": 515 - }, - { - "name": "minecraft:explorer_pottery_sherd", - "id": 670 - }, - { - "name": "minecraft:exposed_copper", - "id": -341 - }, - { - "name": "minecraft:exposed_cut_copper", - "id": -348 - }, - { - "name": "minecraft:exposed_cut_copper_slab", - "id": -362 - }, - { - "name": "minecraft:exposed_cut_copper_stairs", - "id": -355 - }, - { - "name": "minecraft:exposed_double_cut_copper_slab", - "id": -369 - }, - { - "name": "minecraft:eye_armor_trim_smithing_template", - "id": 690 - }, - { - "name": "minecraft:farmland", - "id": 60 - }, - { - "name": "minecraft:feather", - "id": 329 - }, - { - "name": "minecraft:fence", - "id": 705 - }, - { - "name": "minecraft:fence_gate", - "id": 107 - }, - { - "name": "minecraft:fermented_spider_eye", - "id": 430 - }, - { - "name": "minecraft:field_masoned_banner_pattern", - "id": 592 - }, - { - "name": "minecraft:filled_map", - "id": 422 - }, - { - "name": "minecraft:fire", - "id": 51 - }, - { - "name": "minecraft:fire_charge", - "id": 516 - }, - { - "name": "minecraft:fire_coral", - "id": -583 - }, - { - "name": "minecraft:firework_rocket", - "id": 526 - }, - { - "name": "minecraft:firework_star", - "id": 527 - }, - { - "name": "minecraft:fishing_rod", - "id": 394 - }, - { - "name": "minecraft:fletching_table", - "id": -201 - }, - { - "name": "minecraft:flint", - "id": 358 - }, - { - "name": "minecraft:flint_and_steel", - "id": 301 - }, - { - "name": "minecraft:flower_banner_pattern", - "id": 588 - }, - { - "name": "minecraft:flower_pot", - "id": 521 - }, - { - "name": "minecraft:flowering_azalea", - "id": -338 - }, - { - "name": "minecraft:flowing_lava", - "id": 10 - }, - { - "name": "minecraft:flowing_water", - "id": 8 - }, - { - "name": "minecraft:fox_spawn_egg", - "id": 492 - }, - { - "name": "minecraft:frame", - "id": 520 - }, - { - "name": "minecraft:friend_pottery_sherd", - "id": 671 - }, - { - "name": "minecraft:frog_spawn", - "id": -468 - }, - { - "name": "minecraft:frog_spawn_egg", - "id": 635 - }, - { - "name": "minecraft:frosted_ice", - "id": 207 - }, - { - "name": "minecraft:furnace", - "id": 61 - }, - { - "name": "minecraft:ghast_spawn_egg", - "id": 456 - }, - { - "name": "minecraft:ghast_tear", - "id": 426 - }, - { - "name": "minecraft:gilded_blackstone", - "id": -281 - }, - { - "name": "minecraft:glass", - "id": 20 - }, - { - "name": "minecraft:glass_bottle", - "id": 429 - }, - { - "name": "minecraft:glass_pane", - "id": 102 - }, - { - "name": "minecraft:glistering_melon_slice", - "id": 436 - }, - { - "name": "minecraft:globe_banner_pattern", - "id": 595 - }, - { - "name": "minecraft:glow_berries", - "id": 715 - }, - { - "name": "minecraft:glow_frame", - "id": 630 - }, - { - "name": "minecraft:glow_ink_sac", - "id": 510 - }, - { - "name": "minecraft:glow_lichen", - "id": -411 - }, - { - "name": "minecraft:glow_squid_spawn_egg", - "id": 505 - }, - { - "name": "minecraft:glow_stick", - "id": 608 - }, - { - "name": "minecraft:glowingobsidian", - "id": 246 - }, - { - "name": "minecraft:glowstone", - "id": 89 - }, - { - "name": "minecraft:glowstone_dust", - "id": 396 - }, - { - "name": "minecraft:goat_horn", - "id": 634 - }, - { - "name": "minecraft:goat_spawn_egg", - "id": 504 - }, - { - "name": "minecraft:gold_block", - "id": 41 - }, - { - "name": "minecraft:gold_ingot", - "id": 308 - }, - { - "name": "minecraft:gold_nugget", - "id": 427 - }, - { - "name": "minecraft:gold_ore", - "id": 14 - }, - { - "name": "minecraft:golden_apple", - "id": 258 - }, - { - "name": "minecraft:golden_axe", - "id": 327 - }, - { - "name": "minecraft:golden_boots", - "id": 356 - }, - { - "name": "minecraft:golden_carrot", - "id": 283 - }, - { - "name": "minecraft:golden_chestplate", - "id": 354 - }, - { - "name": "minecraft:golden_helmet", - "id": 353 - }, - { - "name": "minecraft:golden_hoe", - "id": 335 - }, - { - "name": "minecraft:golden_horse_armor", - "id": 539 - }, - { - "name": "minecraft:golden_leggings", - "id": 355 - }, - { - "name": "minecraft:golden_pickaxe", - "id": 326 - }, - { - "name": "minecraft:golden_rail", - "id": 27 - }, - { - "name": "minecraft:golden_shovel", - "id": 325 - }, - { - "name": "minecraft:golden_sword", - "id": 324 - }, - { - "name": "minecraft:granite_stairs", - "id": -169 - }, - { - "name": "minecraft:grass", - "id": 2 - }, - { - "name": "minecraft:grass_path", - "id": 198 - }, - { - "name": "minecraft:gravel", - "id": 13 - }, - { - "name": "minecraft:gray_candle", - "id": -420 - }, - { - "name": "minecraft:gray_candle_cake", - "id": -437 - }, - { - "name": "minecraft:gray_carpet", - "id": -603 - }, - { - "name": "minecraft:gray_concrete", - "id": -634 - }, - { - "name": "minecraft:gray_dye", - "id": 405 - }, - { - "name": "minecraft:gray_glazed_terracotta", - "id": 227 - }, - { - "name": "minecraft:gray_shulker_box", - "id": -619 - }, - { - "name": "minecraft:gray_wool", - "id": -553 - }, - { - "name": "minecraft:green_candle", - "id": -426 - }, - { - "name": "minecraft:green_candle_cake", - "id": -443 - }, - { - "name": "minecraft:green_carpet", - "id": -609 - }, - { - "name": "minecraft:green_concrete", - "id": -640 - }, - { - "name": "minecraft:green_dye", - "id": 399 - }, - { - "name": "minecraft:green_glazed_terracotta", - "id": 233 - }, - { - "name": "minecraft:green_shulker_box", - "id": -625 - }, - { - "name": "minecraft:green_wool", - "id": -560 - }, - { - "name": "minecraft:grindstone", - "id": -195 - }, - { - "name": "minecraft:guardian_spawn_egg", - "id": 463 - }, - { - "name": "minecraft:gunpowder", - "id": 330 - }, - { - "name": "minecraft:hanging_roots", - "id": -319 - }, - { - "name": "minecraft:hard_glass", - "id": 253 - }, - { - "name": "minecraft:hard_glass_pane", - "id": 190 - }, - { - "name": "minecraft:hard_stained_glass", - "id": 254 - }, - { - "name": "minecraft:hard_stained_glass_pane", - "id": 191 - }, - { - "name": "minecraft:hardened_clay", - "id": 172 - }, - { - "name": "minecraft:hay_block", - "id": 170 - }, - { - "name": "minecraft:heart_of_the_sea", - "id": 578 - }, - { - "name": "minecraft:heart_pottery_sherd", - "id": 672 - }, - { - "name": "minecraft:heartbreak_pottery_sherd", - "id": 673 - }, - { - "name": "minecraft:heavy_weighted_pressure_plate", - "id": 148 - }, - { - "name": "minecraft:hoglin_spawn_egg", - "id": 498 - }, - { - "name": "minecraft:honey_block", - "id": -220 - }, - { - "name": "minecraft:honey_bottle", - "id": 599 - }, - { - "name": "minecraft:honeycomb", - "id": 598 - }, - { - "name": "minecraft:honeycomb_block", - "id": -221 - }, - { - "name": "minecraft:hopper", - "id": 534 - }, - { - "name": "minecraft:hopper_minecart", - "id": 533 - }, - { - "name": "minecraft:horn_coral", - "id": -584 - }, - { - "name": "minecraft:horse_spawn_egg", - "id": 460 - }, - { - "name": "minecraft:host_armor_trim_smithing_template", - "id": 700 - }, - { - "name": "minecraft:howl_pottery_sherd", - "id": 674 - }, - { - "name": "minecraft:husk_spawn_egg", - "id": 465 - }, - { - "name": "minecraft:ice", - "id": 79 - }, - { - "name": "minecraft:ice_bomb", - "id": 602 - }, - { - "name": "minecraft:infested_deepslate", - "id": -454 - }, - { - "name": "minecraft:info_update", - "id": 248 - }, - { - "name": "minecraft:info_update2", - "id": 249 - }, - { - "name": "minecraft:ink_sac", - "id": 415 - }, - { - "name": "minecraft:invisible_bedrock", - "id": 95 - }, - { - "name": "minecraft:iron_axe", - "id": 300 - }, - { - "name": "minecraft:iron_bars", - "id": 101 - }, - { - "name": "minecraft:iron_block", - "id": 42 - }, - { - "name": "minecraft:iron_boots", - "id": 348 - }, - { - "name": "minecraft:iron_chestplate", - "id": 346 - }, - { - "name": "minecraft:iron_door", - "id": 374 - }, - { - "name": "minecraft:iron_golem_spawn_egg", - "id": 506 - }, - { - "name": "minecraft:iron_helmet", - "id": 345 - }, - { - "name": "minecraft:iron_hoe", - "id": 333 - }, - { - "name": "minecraft:iron_horse_armor", - "id": 538 - }, - { - "name": "minecraft:iron_ingot", - "id": 307 - }, - { - "name": "minecraft:iron_leggings", - "id": 347 - }, - { - "name": "minecraft:iron_nugget", - "id": 576 - }, - { - "name": "minecraft:iron_ore", - "id": 15 - }, - { - "name": "minecraft:iron_pickaxe", - "id": 299 - }, - { - "name": "minecraft:iron_shovel", - "id": 298 - }, - { - "name": "minecraft:iron_sword", - "id": 309 - }, - { - "name": "minecraft:iron_trapdoor", - "id": 167 - }, - { - "name": "minecraft:item.acacia_door", - "id": 196 - }, - { - "name": "minecraft:item.bed", - "id": 26 - }, - { - "name": "minecraft:item.beetroot", - "id": 244 - }, - { - "name": "minecraft:item.birch_door", - "id": 194 - }, - { - "name": "minecraft:item.brewing_stand", - "id": 117 - }, - { - "name": "minecraft:item.cake", - "id": 92 - }, - { - "name": "minecraft:item.camera", - "id": 242 - }, - { - "name": "minecraft:item.campfire", - "id": -209 - }, - { - "name": "minecraft:item.cauldron", - "id": 118 - }, - { - "name": "minecraft:item.chain", - "id": -286 - }, - { - "name": "minecraft:item.crimson_door", - "id": -244 - }, - { - "name": "minecraft:item.dark_oak_door", - "id": 197 - }, - { - "name": "minecraft:item.flower_pot", - "id": 140 - }, - { - "name": "minecraft:item.frame", - "id": 199 - }, - { - "name": "minecraft:item.glow_frame", - "id": -339 - }, - { - "name": "minecraft:item.hopper", - "id": 154 - }, - { - "name": "minecraft:item.iron_door", - "id": 71 - }, - { - "name": "minecraft:item.jungle_door", - "id": 195 - }, - { - "name": "minecraft:item.kelp", - "id": -138 - }, - { - "name": "minecraft:item.mangrove_door", - "id": -493 - }, - { - "name": "minecraft:item.nether_sprouts", - "id": -238 - }, - { - "name": "minecraft:item.nether_wart", - "id": 115 - }, - { - "name": "minecraft:item.reeds", - "id": 83 - }, - { - "name": "minecraft:item.skull", - "id": 144 - }, - { - "name": "minecraft:item.soul_campfire", - "id": -290 - }, - { - "name": "minecraft:item.spruce_door", - "id": 193 - }, - { - "name": "minecraft:item.warped_door", - "id": -245 - }, - { - "name": "minecraft:item.wheat", - "id": 59 - }, - { - "name": "minecraft:item.wooden_door", - "id": 64 - }, - { - "name": "minecraft:jigsaw", - "id": -211 - }, - { - "name": "minecraft:jukebox", - "id": 84 - }, - { - "name": "minecraft:jungle_boat", - "id": 379 - }, - { - "name": "minecraft:jungle_button", - "id": -143 - }, - { - "name": "minecraft:jungle_chest_boat", - "id": 647 - }, - { - "name": "minecraft:jungle_door", - "id": 562 - }, - { - "name": "minecraft:jungle_fence", - "id": -578 - }, - { - "name": "minecraft:jungle_fence_gate", - "id": 185 - }, - { - "name": "minecraft:jungle_hanging_sign", - "id": -503 - }, - { - "name": "minecraft:jungle_log", - "id": -571 - }, - { - "name": "minecraft:jungle_pressure_plate", - "id": -153 - }, - { - "name": "minecraft:jungle_sign", - "id": 585 - }, - { - "name": "minecraft:jungle_stairs", - "id": 136 - }, - { - "name": "minecraft:jungle_standing_sign", - "id": -188 - }, - { - "name": "minecraft:jungle_trapdoor", - "id": -148 - }, - { - "name": "minecraft:jungle_wall_sign", - "id": -189 - }, - { - "name": "minecraft:kelp", - "id": 384 - }, - { - "name": "minecraft:ladder", - "id": 65 - }, - { - "name": "minecraft:lantern", - "id": -208 - }, - { - "name": "minecraft:lapis_block", - "id": 22 - }, - { - "name": "minecraft:lapis_lazuli", - "id": 416 - }, - { - "name": "minecraft:lapis_ore", - "id": 21 - }, - { - "name": "minecraft:large_amethyst_bud", - "id": -330 - }, - { - "name": "minecraft:lava", - "id": 11 - }, - { - "name": "minecraft:lava_bucket", - "id": 365 - }, - { - "name": "minecraft:lead", - "id": 554 - }, - { - "name": "minecraft:leather", - "id": 383 - }, - { - "name": "minecraft:leather_boots", - "id": 340 - }, - { - "name": "minecraft:leather_chestplate", - "id": 338 - }, - { - "name": "minecraft:leather_helmet", - "id": 337 - }, - { - "name": "minecraft:leather_horse_armor", - "id": 537 - }, - { - "name": "minecraft:leather_leggings", - "id": 339 - }, - { - "name": "minecraft:leaves", - "id": 18 - }, - { - "name": "minecraft:leaves2", - "id": 161 - }, - { - "name": "minecraft:lectern", - "id": -194 - }, - { - "name": "minecraft:lever", - "id": 69 - }, - { - "name": "minecraft:light_block", - "id": -215 - }, - { - "name": "minecraft:light_blue_candle", - "id": -416 - }, - { - "name": "minecraft:light_blue_candle_cake", - "id": -433 - }, - { - "name": "minecraft:light_blue_carpet", - "id": -599 - }, - { - "name": "minecraft:light_blue_concrete", - "id": -630 - }, - { - "name": "minecraft:light_blue_dye", - "id": 409 - }, - { - "name": "minecraft:light_blue_glazed_terracotta", - "id": 223 - }, - { - "name": "minecraft:light_blue_shulker_box", - "id": -615 - }, - { - "name": "minecraft:light_blue_wool", - "id": -562 - }, - { - "name": "minecraft:light_gray_candle", - "id": -421 - }, - { - "name": "minecraft:light_gray_candle_cake", - "id": -438 - }, - { - "name": "minecraft:light_gray_carpet", - "id": -604 - }, - { - "name": "minecraft:light_gray_concrete", - "id": -635 - }, - { - "name": "minecraft:light_gray_dye", - "id": 404 - }, - { - "name": "minecraft:light_gray_shulker_box", - "id": -620 - }, - { - "name": "minecraft:light_gray_wool", - "id": -552 - }, - { - "name": "minecraft:light_weighted_pressure_plate", - "id": 147 - }, - { - "name": "minecraft:lightning_rod", - "id": -312 - }, - { - "name": "minecraft:lime_candle", - "id": -418 - }, - { - "name": "minecraft:lime_candle_cake", - "id": -435 - }, - { - "name": "minecraft:lime_carpet", - "id": -601 - }, - { - "name": "minecraft:lime_concrete", - "id": -632 - }, - { - "name": "minecraft:lime_dye", - "id": 407 - }, - { - "name": "minecraft:lime_glazed_terracotta", - "id": 225 - }, - { - "name": "minecraft:lime_shulker_box", - "id": -617 - }, - { - "name": "minecraft:lime_wool", - "id": -559 - }, - { - "name": "minecraft:lingering_potion", - "id": 569 - }, - { - "name": "minecraft:lit_blast_furnace", - "id": -214 - }, - { - "name": "minecraft:lit_deepslate_redstone_ore", - "id": -404 - }, - { - "name": "minecraft:lit_furnace", - "id": 62 - }, - { - "name": "minecraft:lit_pumpkin", - "id": 91 - }, - { - "name": "minecraft:lit_redstone_lamp", - "id": 124 - }, - { - "name": "minecraft:lit_redstone_ore", - "id": 74 - }, - { - "name": "minecraft:lit_smoker", - "id": -199 - }, - { - "name": "minecraft:llama_spawn_egg", - "id": 475 - }, - { - "name": "minecraft:lodestone", - "id": -222 - }, - { - "name": "minecraft:lodestone_compass", - "id": 609 - }, - { - "name": "minecraft:log", - "id": 704 - }, - { - "name": "minecraft:log2", - "id": 707 - }, - { - "name": "minecraft:loom", - "id": -204 - }, - { - "name": "minecraft:magenta_candle", - "id": -415 - }, - { - "name": "minecraft:magenta_candle_cake", - "id": -432 - }, - { - "name": "minecraft:magenta_carpet", - "id": -598 - }, - { - "name": "minecraft:magenta_concrete", - "id": -629 - }, - { - "name": "minecraft:magenta_dye", - "id": 410 - }, - { - "name": "minecraft:magenta_glazed_terracotta", - "id": 222 - }, - { - "name": "minecraft:magenta_shulker_box", - "id": -614 - }, - { - "name": "minecraft:magenta_wool", - "id": -565 - }, - { - "name": "minecraft:magma", - "id": 213 - }, - { - "name": "minecraft:magma_cream", - "id": 432 - }, - { - "name": "minecraft:magma_cube_spawn_egg", - "id": 457 - }, - { - "name": "minecraft:mangrove_boat", - "id": 642 - }, - { - "name": "minecraft:mangrove_button", - "id": -487 - }, - { - "name": "minecraft:mangrove_chest_boat", - "id": 651 - }, - { - "name": "minecraft:mangrove_door", - "id": 640 - }, - { - "name": "minecraft:mangrove_double_slab", - "id": -499 - }, - { - "name": "minecraft:mangrove_fence", - "id": -491 - }, - { - "name": "minecraft:mangrove_fence_gate", - "id": -492 - }, - { - "name": "minecraft:mangrove_hanging_sign", - "id": -508 - }, - { - "name": "minecraft:mangrove_leaves", - "id": -472 - }, - { - "name": "minecraft:mangrove_log", - "id": -484 - }, - { - "name": "minecraft:mangrove_planks", - "id": -486 - }, - { - "name": "minecraft:mangrove_pressure_plate", - "id": -490 - }, - { - "name": "minecraft:mangrove_propagule", - "id": -474 - }, - { - "name": "minecraft:mangrove_roots", - "id": -482 - }, - { - "name": "minecraft:mangrove_sign", - "id": 641 - }, - { - "name": "minecraft:mangrove_slab", - "id": -489 - }, - { - "name": "minecraft:mangrove_stairs", - "id": -488 - }, - { - "name": "minecraft:mangrove_standing_sign", - "id": -494 - }, - { - "name": "minecraft:mangrove_trapdoor", - "id": -496 - }, - { - "name": "minecraft:mangrove_wall_sign", - "id": -495 - }, - { - "name": "minecraft:mangrove_wood", - "id": -497 - }, - { - "name": "minecraft:medicine", - "id": 606 - }, - { - "name": "minecraft:medium_amethyst_bud", - "id": -331 - }, - { - "name": "minecraft:melon_block", - "id": 103 - }, - { - "name": "minecraft:melon_seeds", - "id": 293 - }, - { - "name": "minecraft:melon_slice", - "id": 272 - }, - { - "name": "minecraft:melon_stem", - "id": 105 - }, - { - "name": "minecraft:milk_bucket", - "id": 363 - }, - { - "name": "minecraft:minecart", - "id": 372 - }, - { - "name": "minecraft:miner_pottery_sherd", - "id": 675 - }, - { - "name": "minecraft:mob_spawner", - "id": 52 - }, - { - "name": "minecraft:mojang_banner_pattern", - "id": 591 - }, - { - "name": "minecraft:monster_egg", - "id": 97 - }, - { - "name": "minecraft:mooshroom_spawn_egg", - "id": 442 - }, - { - "name": "minecraft:moss_block", - "id": -320 - }, - { - "name": "minecraft:moss_carpet", - "id": -335 - }, - { - "name": "minecraft:mossy_cobblestone", - "id": 48 - }, - { - "name": "minecraft:mossy_cobblestone_stairs", - "id": -179 - }, - { - "name": "minecraft:mossy_stone_brick_stairs", - "id": -175 - }, - { - "name": "minecraft:mourner_pottery_sherd", - "id": 676 - }, - { - "name": "minecraft:moving_block", - "id": 250 - }, - { - "name": "minecraft:mud", - "id": -473 - }, - { - "name": "minecraft:mud_brick_double_slab", - "id": -479 - }, - { - "name": "minecraft:mud_brick_slab", - "id": -478 - }, - { - "name": "minecraft:mud_brick_stairs", - "id": -480 - }, - { - "name": "minecraft:mud_brick_wall", - "id": -481 - }, - { - "name": "minecraft:mud_bricks", - "id": -475 - }, - { - "name": "minecraft:muddy_mangrove_roots", - "id": -483 - }, - { - "name": "minecraft:mule_spawn_egg", - "id": 468 - }, - { - "name": "minecraft:mushroom_stew", - "id": 260 - }, - { - "name": "minecraft:music_disc_11", - "id": 551 - }, - { - "name": "minecraft:music_disc_13", - "id": 541 - }, - { - "name": "minecraft:music_disc_5", - "id": 643 - }, - { - "name": "minecraft:music_disc_blocks", - "id": 543 - }, - { - "name": "minecraft:music_disc_cat", - "id": 542 - }, - { - "name": "minecraft:music_disc_chirp", - "id": 544 - }, - { - "name": "minecraft:music_disc_far", - "id": 545 - }, - { - "name": "minecraft:music_disc_mall", - "id": 546 - }, - { - "name": "minecraft:music_disc_mellohi", - "id": 547 - }, - { - "name": "minecraft:music_disc_otherside", - "id": 633 - }, - { - "name": "minecraft:music_disc_pigstep", - "id": 627 - }, - { - "name": "minecraft:music_disc_relic", - "id": 701 - }, - { - "name": "minecraft:music_disc_stal", - "id": 548 - }, - { - "name": "minecraft:music_disc_strad", - "id": 549 - }, - { - "name": "minecraft:music_disc_wait", - "id": 552 - }, - { - "name": "minecraft:music_disc_ward", - "id": 550 - }, - { - "name": "minecraft:mutton", - "id": 557 - }, - { - "name": "minecraft:mycelium", - "id": 110 - }, - { - "name": "minecraft:name_tag", - "id": 555 - }, - { - "name": "minecraft:nautilus_shell", - "id": 577 - }, - { - "name": "minecraft:nether_brick", - "id": 112 - }, - { - "name": "minecraft:nether_brick_fence", - "id": 113 - }, - { - "name": "minecraft:nether_brick_stairs", - "id": 114 - }, - { - "name": "minecraft:nether_gold_ore", - "id": -288 - }, - { - "name": "minecraft:nether_sprouts", - "id": 628 - }, - { - "name": "minecraft:nether_star", - "id": 525 - }, - { - "name": "minecraft:nether_wart", - "id": 294 - }, - { - "name": "minecraft:nether_wart_block", - "id": 214 - }, - { - "name": "minecraft:netherbrick", - "id": 530 - }, - { - "name": "minecraft:netherite_axe", - "id": 613 - }, - { - "name": "minecraft:netherite_block", - "id": -270 - }, - { - "name": "minecraft:netherite_boots", - "id": 619 - }, - { - "name": "minecraft:netherite_chestplate", - "id": 617 - }, - { - "name": "minecraft:netherite_helmet", - "id": 616 - }, - { - "name": "minecraft:netherite_hoe", - "id": 614 - }, - { - "name": "minecraft:netherite_ingot", - "id": 615 - }, - { - "name": "minecraft:netherite_leggings", - "id": 618 - }, - { - "name": "minecraft:netherite_pickaxe", - "id": 612 - }, - { - "name": "minecraft:netherite_scrap", - "id": 620 - }, - { - "name": "minecraft:netherite_shovel", - "id": 611 - }, - { - "name": "minecraft:netherite_sword", - "id": 610 - }, - { - "name": "minecraft:netherite_upgrade_smithing_template", - "id": 684 - }, - { - "name": "minecraft:netherrack", - "id": 87 - }, - { - "name": "minecraft:netherreactor", - "id": 247 - }, - { - "name": "minecraft:normal_stone_stairs", - "id": -180 - }, - { - "name": "minecraft:noteblock", - "id": 25 - }, - { - "name": "minecraft:npc_spawn_egg", - "id": 472 - }, - { - "name": "minecraft:oak_boat", - "id": 377 - }, - { - "name": "minecraft:oak_chest_boat", - "id": 645 - }, - { - "name": "minecraft:oak_fence", - "id": 85 - }, - { - "name": "minecraft:oak_hanging_sign", - "id": -500 - }, - { - "name": "minecraft:oak_log", - "id": 17 - }, - { - "name": "minecraft:oak_sign", - "id": 360 - }, - { - "name": "minecraft:oak_stairs", - "id": 53 - }, - { - "name": "minecraft:observer", - "id": 251 - }, - { - "name": "minecraft:obsidian", - "id": 49 - }, - { - "name": "minecraft:ocelot_spawn_egg", - "id": 453 - }, - { - "name": "minecraft:ochre_froglight", - "id": -471 - }, - { - "name": "minecraft:orange_candle", - "id": -414 - }, - { - "name": "minecraft:orange_candle_cake", - "id": -431 - }, - { - "name": "minecraft:orange_carpet", - "id": -597 - }, - { - "name": "minecraft:orange_concrete", - "id": -628 - }, - { - "name": "minecraft:orange_dye", - "id": 411 - }, - { - "name": "minecraft:orange_glazed_terracotta", - "id": 221 - }, - { - "name": "minecraft:orange_shulker_box", - "id": -613 - }, - { - "name": "minecraft:orange_wool", - "id": -557 - }, - { - "name": "minecraft:oxidized_copper", - "id": -343 - }, - { - "name": "minecraft:oxidized_cut_copper", - "id": -350 - }, - { - "name": "minecraft:oxidized_cut_copper_slab", - "id": -364 - }, - { - "name": "minecraft:oxidized_cut_copper_stairs", - "id": -357 - }, - { - "name": "minecraft:oxidized_double_cut_copper_slab", - "id": -371 - }, - { - "name": "minecraft:packed_ice", - "id": 174 - }, - { - "name": "minecraft:packed_mud", - "id": -477 - }, - { - "name": "minecraft:painting", - "id": 359 - }, - { - "name": "minecraft:panda_spawn_egg", - "id": 491 - }, - { - "name": "minecraft:paper", - "id": 388 - }, - { - "name": "minecraft:parrot_spawn_egg", - "id": 480 - }, - { - "name": "minecraft:pearlescent_froglight", - "id": -469 - }, - { - "name": "minecraft:phantom_membrane", - "id": 581 - }, - { - "name": "minecraft:phantom_spawn_egg", - "id": 488 - }, - { - "name": "minecraft:pig_spawn_egg", - "id": 439 - }, - { - "name": "minecraft:piglin_banner_pattern", - "id": 594 - }, - { - "name": "minecraft:piglin_brute_spawn_egg", - "id": 501 - }, - { - "name": "minecraft:piglin_spawn_egg", - "id": 499 - }, - { - "name": "minecraft:pillager_spawn_egg", - "id": 493 - }, - { - "name": "minecraft:pink_candle", - "id": -419 - }, - { - "name": "minecraft:pink_candle_cake", - "id": -436 - }, - { - "name": "minecraft:pink_carpet", - "id": -602 - }, - { - "name": "minecraft:pink_concrete", - "id": -633 - }, - { - "name": "minecraft:pink_dye", - "id": 406 - }, - { - "name": "minecraft:pink_glazed_terracotta", - "id": 226 - }, - { - "name": "minecraft:pink_petals", - "id": -549 - }, - { - "name": "minecraft:pink_shulker_box", - "id": -618 - }, - { - "name": "minecraft:pink_wool", - "id": -566 - }, - { - "name": "minecraft:piston", - "id": 33 - }, - { - "name": "minecraft:piston_arm_collision", - "id": 34 - }, - { - "name": "minecraft:pitcher_crop", - "id": -574 - }, - { - "name": "minecraft:pitcher_plant", - "id": -612 - }, - { - "name": "minecraft:pitcher_pod", - "id": 297 - }, - { - "name": "minecraft:planks", - "id": 5 - }, - { - "name": "minecraft:plenty_pottery_sherd", - "id": 677 - }, - { - "name": "minecraft:podzol", - "id": 243 - }, - { - "name": "minecraft:pointed_dripstone", - "id": -308 - }, - { - "name": "minecraft:poisonous_potato", - "id": 282 - }, - { - "name": "minecraft:polar_bear_spawn_egg", - "id": 474 - }, - { - "name": "minecraft:polished_andesite_stairs", - "id": -174 - }, - { - "name": "minecraft:polished_basalt", - "id": -235 - }, - { - "name": "minecraft:polished_blackstone", - "id": -291 - }, - { - "name": "minecraft:polished_blackstone_brick_double_slab", - "id": -285 - }, - { - "name": "minecraft:polished_blackstone_brick_slab", - "id": -284 - }, - { - "name": "minecraft:polished_blackstone_brick_stairs", - "id": -275 - }, - { - "name": "minecraft:polished_blackstone_brick_wall", - "id": -278 - }, - { - "name": "minecraft:polished_blackstone_bricks", - "id": -274 - }, - { - "name": "minecraft:polished_blackstone_button", - "id": -296 - }, - { - "name": "minecraft:polished_blackstone_double_slab", - "id": -294 - }, - { - "name": "minecraft:polished_blackstone_pressure_plate", - "id": -295 - }, - { - "name": "minecraft:polished_blackstone_slab", - "id": -293 - }, - { - "name": "minecraft:polished_blackstone_stairs", - "id": -292 - }, - { - "name": "minecraft:polished_blackstone_wall", - "id": -297 - }, - { - "name": "minecraft:polished_deepslate", - "id": -383 - }, - { - "name": "minecraft:polished_deepslate_double_slab", - "id": -397 - }, - { - "name": "minecraft:polished_deepslate_slab", - "id": -384 - }, - { - "name": "minecraft:polished_deepslate_stairs", - "id": -385 - }, - { - "name": "minecraft:polished_deepslate_wall", - "id": -386 - }, - { - "name": "minecraft:polished_diorite_stairs", - "id": -173 - }, - { - "name": "minecraft:polished_granite_stairs", - "id": -172 - }, - { - "name": "minecraft:popped_chorus_fruit", - "id": 566 - }, - { - "name": "minecraft:porkchop", - "id": 262 - }, - { - "name": "minecraft:portal", - "id": 90 - }, - { - "name": "minecraft:potato", - "id": 280 - }, - { - "name": "minecraft:potatoes", - "id": 142 - }, - { - "name": "minecraft:potion", - "id": 428 - }, - { - "name": "minecraft:powder_snow", - "id": -306 - }, - { - "name": "minecraft:powder_snow_bucket", - "id": 370 - }, - { - "name": "minecraft:powered_comparator", - "id": 150 - }, - { - "name": "minecraft:powered_repeater", - "id": 94 - }, - { - "name": "minecraft:prismarine", - "id": 168 - }, - { - "name": "minecraft:prismarine_bricks_stairs", - "id": -4 - }, - { - "name": "minecraft:prismarine_crystals", - "id": 556 - }, - { - "name": "minecraft:prismarine_shard", - "id": 572 - }, - { - "name": "minecraft:prismarine_stairs", - "id": -2 - }, - { - "name": "minecraft:prize_pottery_sherd", - "id": 678 - }, - { - "name": "minecraft:pufferfish", - "id": 267 - }, - { - "name": "minecraft:pufferfish_bucket", - "id": 369 - }, - { - "name": "minecraft:pufferfish_spawn_egg", - "id": 483 - }, - { - "name": "minecraft:pumpkin", - "id": 86 - }, - { - "name": "minecraft:pumpkin_pie", - "id": 284 - }, - { - "name": "minecraft:pumpkin_seeds", - "id": 292 - }, - { - "name": "minecraft:pumpkin_stem", - "id": 104 - }, - { - "name": "minecraft:purple_candle", - "id": -423 - }, - { - "name": "minecraft:purple_candle_cake", - "id": -440 - }, - { - "name": "minecraft:purple_carpet", - "id": -606 - }, - { - "name": "minecraft:purple_concrete", - "id": -637 - }, - { - "name": "minecraft:purple_dye", - "id": 402 - }, - { - "name": "minecraft:purple_glazed_terracotta", - "id": 219 - }, - { - "name": "minecraft:purple_shulker_box", - "id": -622 - }, - { - "name": "minecraft:purple_wool", - "id": -564 - }, - { - "name": "minecraft:purpur_block", - "id": 201 - }, - { - "name": "minecraft:purpur_stairs", - "id": 203 - }, - { - "name": "minecraft:quartz", - "id": 531 - }, - { - "name": "minecraft:quartz_block", - "id": 155 - }, - { - "name": "minecraft:quartz_bricks", - "id": -304 - }, - { - "name": "minecraft:quartz_ore", - "id": 153 - }, - { - "name": "minecraft:quartz_stairs", - "id": 156 - }, - { - "name": "minecraft:rabbit", - "id": 288 - }, - { - "name": "minecraft:rabbit_foot", - "id": 535 - }, - { - "name": "minecraft:rabbit_hide", - "id": 536 - }, - { - "name": "minecraft:rabbit_spawn_egg", - "id": 461 - }, - { - "name": "minecraft:rabbit_stew", - "id": 290 - }, - { - "name": "minecraft:rail", - "id": 66 - }, - { - "name": "minecraft:raiser_armor_trim_smithing_template", - "id": 698 - }, - { - "name": "minecraft:rapid_fertilizer", - "id": 604 - }, - { - "name": "minecraft:ravager_spawn_egg", - "id": 495 - }, - { - "name": "minecraft:raw_copper", - "id": 514 - }, - { - "name": "minecraft:raw_copper_block", - "id": -452 - }, - { - "name": "minecraft:raw_gold", - "id": 513 - }, - { - "name": "minecraft:raw_gold_block", - "id": -453 - }, - { - "name": "minecraft:raw_iron", - "id": 512 - }, - { - "name": "minecraft:raw_iron_block", - "id": -451 - }, - { - "name": "minecraft:recovery_compass", - "id": 653 - }, - { - "name": "minecraft:red_candle", - "id": -427 - }, - { - "name": "minecraft:red_candle_cake", - "id": -444 - }, - { - "name": "minecraft:red_carpet", - "id": -610 - }, - { - "name": "minecraft:red_concrete", - "id": -641 - }, - { - "name": "minecraft:red_dye", - "id": 398 - }, - { - "name": "minecraft:red_flower", - "id": 38 - }, - { - "name": "minecraft:red_glazed_terracotta", - "id": 234 - }, - { - "name": "minecraft:red_mushroom", - "id": 40 - }, - { - "name": "minecraft:red_mushroom_block", - "id": 100 - }, - { - "name": "minecraft:red_nether_brick", - "id": 215 - }, - { - "name": "minecraft:red_nether_brick_stairs", - "id": -184 - }, - { - "name": "minecraft:red_sandstone", - "id": 179 - }, - { - "name": "minecraft:red_sandstone_stairs", - "id": 180 - }, - { - "name": "minecraft:red_shulker_box", - "id": -626 - }, - { - "name": "minecraft:red_wool", - "id": -556 - }, - { - "name": "minecraft:redstone", - "id": 375 - }, - { - "name": "minecraft:redstone_block", - "id": 152 - }, - { - "name": "minecraft:redstone_lamp", - "id": 123 - }, - { - "name": "minecraft:redstone_ore", - "id": 73 - }, - { - "name": "minecraft:redstone_torch", - "id": 76 - }, - { - "name": "minecraft:redstone_wire", - "id": 55 - }, - { - "name": "minecraft:reinforced_deepslate", - "id": -466 - }, - { - "name": "minecraft:repeater", - "id": 421 - }, - { - "name": "minecraft:repeating_command_block", - "id": 188 - }, - { - "name": "minecraft:reserved6", - "id": 255 - }, - { - "name": "minecraft:respawn_anchor", - "id": -272 - }, - { - "name": "minecraft:rib_armor_trim_smithing_template", - "id": 694 - }, - { - "name": "minecraft:rotten_flesh", - "id": 277 - }, - { - "name": "minecraft:saddle", - "id": 373 - }, - { - "name": "minecraft:salmon", - "id": 265 - }, - { - "name": "minecraft:salmon_bucket", - "id": 367 - }, - { - "name": "minecraft:salmon_spawn_egg", - "id": 484 - }, - { - "name": "minecraft:sand", - "id": 12 - }, - { - "name": "minecraft:sandstone", - "id": 24 - }, - { - "name": "minecraft:sandstone_stairs", - "id": 128 - }, - { - "name": "minecraft:sapling", - "id": 6 - }, - { - "name": "minecraft:scaffolding", - "id": -165 - }, - { - "name": "minecraft:sculk", - "id": -458 - }, - { - "name": "minecraft:sculk_catalyst", - "id": -460 - }, - { - "name": "minecraft:sculk_sensor", - "id": -307 - }, - { - "name": "minecraft:sculk_shrieker", - "id": -461 - }, - { - "name": "minecraft:sculk_vein", - "id": -459 - }, - { - "name": "minecraft:scute", - "id": 579 - }, - { - "name": "minecraft:sea_lantern", - "id": 169 - }, - { - "name": "minecraft:sea_pickle", - "id": -156 - }, - { - "name": "minecraft:seagrass", - "id": -130 - }, - { - "name": "minecraft:sentry_armor_trim_smithing_template", - "id": 685 - }, - { - "name": "minecraft:shaper_armor_trim_smithing_template", - "id": 699 - }, - { - "name": "minecraft:sheaf_pottery_sherd", - "id": 679 - }, - { - "name": "minecraft:shears", - "id": 423 - }, - { - "name": "minecraft:sheep_spawn_egg", - "id": 440 - }, - { - "name": "minecraft:shelter_pottery_sherd", - "id": 680 - }, - { - "name": "minecraft:shield", - "id": 357 - }, - { - "name": "minecraft:shroomlight", - "id": -230 - }, - { - "name": "minecraft:shulker_box", - "id": 709 - }, - { - "name": "minecraft:shulker_shell", - "id": 573 - }, - { - "name": "minecraft:shulker_spawn_egg", - "id": 471 - }, - { - "name": "minecraft:silence_armor_trim_smithing_template", - "id": 696 - }, - { - "name": "minecraft:silver_glazed_terracotta", - "id": 228 - }, - { - "name": "minecraft:silverfish_spawn_egg", - "id": 445 - }, - { - "name": "minecraft:skeleton_horse_spawn_egg", - "id": 469 - }, - { - "name": "minecraft:skeleton_spawn_egg", - "id": 446 - }, - { - "name": "minecraft:skull", - "id": 523 - }, - { - "name": "minecraft:skull_banner_pattern", - "id": 590 - }, - { - "name": "minecraft:skull_pottery_sherd", - "id": 681 - }, - { - "name": "minecraft:slime", - "id": 165 - }, - { - "name": "minecraft:slime_ball", - "id": 390 - }, - { - "name": "minecraft:slime_spawn_egg", - "id": 447 - }, - { - "name": "minecraft:small_amethyst_bud", - "id": -332 - }, - { - "name": "minecraft:small_dripleaf_block", - "id": -336 - }, - { - "name": "minecraft:smithing_table", - "id": -202 - }, - { - "name": "minecraft:smoker", - "id": -198 - }, - { - "name": "minecraft:smooth_basalt", - "id": -377 - }, - { - "name": "minecraft:smooth_quartz_stairs", - "id": -185 - }, - { - "name": "minecraft:smooth_red_sandstone_stairs", - "id": -176 - }, - { - "name": "minecraft:smooth_sandstone_stairs", - "id": -177 - }, - { - "name": "minecraft:smooth_stone", - "id": -183 - }, - { - "name": "minecraft:sniffer_egg", - "id": -596 - }, - { - "name": "minecraft:sniffer_spawn_egg", - "id": 502 - }, - { - "name": "minecraft:snort_pottery_sherd", - "id": 682 - }, - { - "name": "minecraft:snout_armor_trim_smithing_template", - "id": 693 - }, - { - "name": "minecraft:snow", - "id": 80 - }, - { - "name": "minecraft:snow_golem_spawn_egg", - "id": 507 - }, - { - "name": "minecraft:snow_layer", - "id": 78 - }, - { - "name": "minecraft:snowball", - "id": 376 - }, - { - "name": "minecraft:soul_campfire", - "id": 629 - }, - { - "name": "minecraft:soul_fire", - "id": -237 - }, - { - "name": "minecraft:soul_lantern", - "id": -269 - }, - { - "name": "minecraft:soul_sand", - "id": 88 - }, - { - "name": "minecraft:soul_soil", - "id": -236 - }, - { - "name": "minecraft:soul_torch", - "id": -268 - }, - { - "name": "minecraft:sparkler", - "id": 607 - }, - { - "name": "minecraft:spawn_egg", - "id": 713 - }, - { - "name": "minecraft:spider_eye", - "id": 278 - }, - { - "name": "minecraft:spider_spawn_egg", - "id": 448 - }, - { - "name": "minecraft:spire_armor_trim_smithing_template", - "id": 695 - }, - { - "name": "minecraft:splash_potion", - "id": 568 - }, - { - "name": "minecraft:sponge", - "id": 19 - }, - { - "name": "minecraft:spore_blossom", - "id": -321 - }, - { - "name": "minecraft:spruce_boat", - "id": 380 - }, - { - "name": "minecraft:spruce_button", - "id": -144 - }, - { - "name": "minecraft:spruce_chest_boat", - "id": 648 - }, - { - "name": "minecraft:spruce_door", - "id": 560 - }, - { - "name": "minecraft:spruce_fence", - "id": -579 - }, - { - "name": "minecraft:spruce_fence_gate", - "id": 183 - }, - { - "name": "minecraft:spruce_hanging_sign", - "id": -501 - }, - { - "name": "minecraft:spruce_log", - "id": -569 - }, - { - "name": "minecraft:spruce_pressure_plate", - "id": -154 - }, - { - "name": "minecraft:spruce_sign", - "id": 583 - }, - { - "name": "minecraft:spruce_stairs", - "id": 134 - }, - { - "name": "minecraft:spruce_standing_sign", - "id": -181 - }, - { - "name": "minecraft:spruce_trapdoor", - "id": -149 - }, - { - "name": "minecraft:spruce_wall_sign", - "id": -182 - }, - { - "name": "minecraft:spyglass", - "id": 632 - }, - { - "name": "minecraft:squid_spawn_egg", - "id": 452 - }, - { - "name": "minecraft:stained_glass", - "id": 241 - }, - { - "name": "minecraft:stained_glass_pane", - "id": 160 - }, - { - "name": "minecraft:stained_hardened_clay", - "id": 159 - }, - { - "name": "minecraft:standing_banner", - "id": 176 - }, - { - "name": "minecraft:standing_sign", - "id": 63 - }, - { - "name": "minecraft:stick", - "id": 322 - }, - { - "name": "minecraft:sticky_piston", - "id": 29 - }, - { - "name": "minecraft:sticky_piston_arm_collision", - "id": -217 - }, - { - "name": "minecraft:stone", - "id": 1 - }, - { - "name": "minecraft:stone_axe", - "id": 317 - }, - { - "name": "minecraft:stone_block_slab", - "id": 44 - }, - { - "name": "minecraft:stone_block_slab2", - "id": 182 - }, - { - "name": "minecraft:stone_block_slab3", - "id": -162 - }, - { - "name": "minecraft:stone_block_slab4", - "id": -166 - }, - { - "name": "minecraft:stone_brick_stairs", - "id": 109 - }, - { - "name": "minecraft:stone_button", - "id": 77 - }, - { - "name": "minecraft:stone_hoe", - "id": 332 - }, - { - "name": "minecraft:stone_pickaxe", - "id": 316 - }, - { - "name": "minecraft:stone_pressure_plate", - "id": 70 - }, - { - "name": "minecraft:stone_shovel", - "id": 315 - }, - { - "name": "minecraft:stone_stairs", - "id": 67 - }, - { - "name": "minecraft:stone_sword", - "id": 314 - }, - { - "name": "minecraft:stonebrick", - "id": 98 - }, - { - "name": "minecraft:stonecutter", - "id": 245 - }, - { - "name": "minecraft:stonecutter_block", - "id": -197 - }, - { - "name": "minecraft:stray_spawn_egg", - "id": 464 - }, - { - "name": "minecraft:strider_spawn_egg", - "id": 497 - }, - { - "name": "minecraft:string", - "id": 328 - }, - { - "name": "minecraft:stripped_acacia_log", - "id": -8 - }, - { - "name": "minecraft:stripped_bamboo_block", - "id": -528 - }, - { - "name": "minecraft:stripped_birch_log", - "id": -6 - }, - { - "name": "minecraft:stripped_cherry_log", - "id": -535 - }, - { - "name": "minecraft:stripped_cherry_wood", - "id": -545 - }, - { - "name": "minecraft:stripped_crimson_hyphae", - "id": -300 - }, - { - "name": "minecraft:stripped_crimson_stem", - "id": -240 - }, - { - "name": "minecraft:stripped_dark_oak_log", - "id": -9 - }, - { - "name": "minecraft:stripped_jungle_log", - "id": -7 - }, - { - "name": "minecraft:stripped_mangrove_log", - "id": -485 - }, - { - "name": "minecraft:stripped_mangrove_wood", - "id": -498 - }, - { - "name": "minecraft:stripped_oak_log", - "id": -10 - }, - { - "name": "minecraft:stripped_spruce_log", - "id": -5 - }, - { - "name": "minecraft:stripped_warped_hyphae", - "id": -301 - }, - { - "name": "minecraft:stripped_warped_stem", - "id": -241 - }, - { - "name": "minecraft:structure_block", - "id": 252 - }, - { - "name": "minecraft:structure_void", - "id": 217 - }, - { - "name": "minecraft:sugar", - "id": 418 - }, - { - "name": "minecraft:sugar_cane", - "id": 387 - }, - { - "name": "minecraft:suspicious_gravel", - "id": -573 - }, - { - "name": "minecraft:suspicious_sand", - "id": -529 - }, - { - "name": "minecraft:suspicious_stew", - "id": 597 - }, - { - "name": "minecraft:sweet_berries", - "id": 287 - }, - { - "name": "minecraft:sweet_berry_bush", - "id": -207 - }, - { - "name": "minecraft:tadpole_bucket", - "id": 637 - }, - { - "name": "minecraft:tadpole_spawn_egg", - "id": 636 - }, - { - "name": "minecraft:tallgrass", - "id": 31 - }, - { - "name": "minecraft:target", - "id": -239 - }, - { - "name": "minecraft:tide_armor_trim_smithing_template", - "id": 692 - }, - { - "name": "minecraft:tinted_glass", - "id": -334 - }, - { - "name": "minecraft:tnt", - "id": 46 - }, - { - "name": "minecraft:tnt_minecart", - "id": 532 - }, - { - "name": "minecraft:torch", - "id": 50 - }, - { - "name": "minecraft:torchflower", - "id": -568 - }, - { - "name": "minecraft:torchflower_crop", - "id": -567 - }, - { - "name": "minecraft:torchflower_seeds", - "id": 296 - }, - { - "name": "minecraft:totem_of_undying", - "id": 575 - }, - { - "name": "minecraft:trader_llama_spawn_egg", - "id": 655 - }, - { - "name": "minecraft:trapdoor", - "id": 96 - }, - { - "name": "minecraft:trapped_chest", - "id": 146 - }, - { - "name": "minecraft:trident", - "id": 553 - }, - { - "name": "minecraft:trip_wire", - "id": 132 - }, - { - "name": "minecraft:tripwire_hook", - "id": 131 - }, - { - "name": "minecraft:tropical_fish", - "id": 266 - }, - { - "name": "minecraft:tropical_fish_bucket", - "id": 368 - }, - { - "name": "minecraft:tropical_fish_spawn_egg", - "id": 481 - }, - { - "name": "minecraft:tube_coral", - "id": -131 - }, - { - "name": "minecraft:tuff", - "id": -333 - }, - { - "name": "minecraft:turtle_egg", - "id": -159 - }, - { - "name": "minecraft:turtle_helmet", - "id": 580 - }, - { - "name": "minecraft:turtle_spawn_egg", - "id": 487 - }, - { - "name": "minecraft:twisting_vines", - "id": -287 - }, - { - "name": "minecraft:underwater_torch", - "id": 239 - }, - { - "name": "minecraft:undyed_shulker_box", - "id": 205 - }, - { - "name": "minecraft:unknown", - "id": -305 - }, - { - "name": "minecraft:unlit_redstone_torch", - "id": 75 - }, - { - "name": "minecraft:unpowered_comparator", - "id": 149 - }, - { - "name": "minecraft:unpowered_repeater", - "id": 93 - }, - { - "name": "minecraft:verdant_froglight", - "id": -470 - }, - { - "name": "minecraft:vex_armor_trim_smithing_template", - "id": 691 - }, - { - "name": "minecraft:vex_spawn_egg", - "id": 478 - }, - { - "name": "minecraft:villager_spawn_egg", - "id": 451 - }, - { - "name": "minecraft:vindicator_spawn_egg", - "id": 476 - }, - { - "name": "minecraft:vine", - "id": 106 - }, - { - "name": "minecraft:wall_banner", - "id": 177 - }, - { - "name": "minecraft:wall_sign", - "id": 68 - }, - { - "name": "minecraft:wandering_trader_spawn_egg", - "id": 494 - }, - { - "name": "minecraft:ward_armor_trim_smithing_template", - "id": 689 - }, - { - "name": "minecraft:warden_spawn_egg", - "id": 639 - }, - { - "name": "minecraft:warped_button", - "id": -261 - }, - { - "name": "minecraft:warped_door", - "id": 624 - }, - { - "name": "minecraft:warped_double_slab", - "id": -267 - }, - { - "name": "minecraft:warped_fence", - "id": -257 - }, - { - "name": "minecraft:warped_fence_gate", - "id": -259 - }, - { - "name": "minecraft:warped_fungus", - "id": -229 - }, - { - "name": "minecraft:warped_fungus_on_a_stick", - "id": 625 - }, - { - "name": "minecraft:warped_hanging_sign", - "id": -507 - }, - { - "name": "minecraft:warped_hyphae", - "id": -298 - }, - { - "name": "minecraft:warped_nylium", - "id": -233 - }, - { - "name": "minecraft:warped_planks", - "id": -243 - }, - { - "name": "minecraft:warped_pressure_plate", - "id": -263 - }, - { - "name": "minecraft:warped_roots", - "id": -224 - }, - { - "name": "minecraft:warped_sign", - "id": 622 - }, - { - "name": "minecraft:warped_slab", - "id": -265 - }, - { - "name": "minecraft:warped_stairs", - "id": -255 - }, - { - "name": "minecraft:warped_standing_sign", - "id": -251 - }, - { - "name": "minecraft:warped_stem", - "id": -226 - }, - { - "name": "minecraft:warped_trapdoor", - "id": -247 - }, - { - "name": "minecraft:warped_wall_sign", - "id": -253 - }, - { - "name": "minecraft:warped_wart_block", - "id": -227 - }, - { - "name": "minecraft:water", - "id": 9 - }, - { - "name": "minecraft:water_bucket", - "id": 364 - }, - { - "name": "minecraft:waterlily", - "id": 111 - }, - { - "name": "minecraft:waxed_copper", - "id": -344 - }, - { - "name": "minecraft:waxed_cut_copper", - "id": -351 - }, - { - "name": "minecraft:waxed_cut_copper_slab", - "id": -365 - }, - { - "name": "minecraft:waxed_cut_copper_stairs", - "id": -358 - }, - { - "name": "minecraft:waxed_double_cut_copper_slab", - "id": -372 - }, - { - "name": "minecraft:waxed_exposed_copper", - "id": -345 - }, - { - "name": "minecraft:waxed_exposed_cut_copper", - "id": -352 - }, - { - "name": "minecraft:waxed_exposed_cut_copper_slab", - "id": -366 - }, - { - "name": "minecraft:waxed_exposed_cut_copper_stairs", - "id": -359 - }, - { - "name": "minecraft:waxed_exposed_double_cut_copper_slab", - "id": -373 - }, - { - "name": "minecraft:waxed_oxidized_copper", - "id": -446 - }, - { - "name": "minecraft:waxed_oxidized_cut_copper", - "id": -447 - }, - { - "name": "minecraft:waxed_oxidized_cut_copper_slab", - "id": -449 - }, - { - "name": "minecraft:waxed_oxidized_cut_copper_stairs", - "id": -448 - }, - { - "name": "minecraft:waxed_oxidized_double_cut_copper_slab", - "id": -450 - }, - { - "name": "minecraft:waxed_weathered_copper", - "id": -346 - }, - { - "name": "minecraft:waxed_weathered_cut_copper", - "id": -353 - }, - { - "name": "minecraft:waxed_weathered_cut_copper_slab", - "id": -367 - }, - { - "name": "minecraft:waxed_weathered_cut_copper_stairs", - "id": -360 - }, - { - "name": "minecraft:waxed_weathered_double_cut_copper_slab", - "id": -374 - }, - { - "name": "minecraft:wayfinder_armor_trim_smithing_template", - "id": 697 - }, - { - "name": "minecraft:weathered_copper", - "id": -342 - }, - { - "name": "minecraft:weathered_cut_copper", - "id": -349 - }, - { - "name": "minecraft:weathered_cut_copper_slab", - "id": -363 - }, - { - "name": "minecraft:weathered_cut_copper_stairs", - "id": -356 - }, - { - "name": "minecraft:weathered_double_cut_copper_slab", - "id": -370 - }, - { - "name": "minecraft:web", - "id": 30 - }, - { - "name": "minecraft:weeping_vines", - "id": -231 - }, - { - "name": "minecraft:wheat", - "id": 336 - }, - { - "name": "minecraft:wheat_seeds", - "id": 291 - }, - { - "name": "minecraft:white_candle", - "id": -413 - }, - { - "name": "minecraft:white_candle_cake", - "id": -430 - }, - { - "name": "minecraft:white_carpet", - "id": 171 - }, - { - "name": "minecraft:white_concrete", - "id": 236 - }, - { - "name": "minecraft:white_dye", - "id": 412 - }, - { - "name": "minecraft:white_glazed_terracotta", - "id": 220 - }, - { - "name": "minecraft:white_shulker_box", - "id": 218 - }, - { - "name": "minecraft:white_wool", - "id": 35 - }, - { - "name": "minecraft:wild_armor_trim_smithing_template", - "id": 688 - }, - { - "name": "minecraft:witch_spawn_egg", - "id": 454 - }, - { - "name": "minecraft:wither_rose", - "id": -216 - }, - { - "name": "minecraft:wither_skeleton_spawn_egg", - "id": 466 - }, - { - "name": "minecraft:wither_spawn_egg", - "id": 509 - }, - { - "name": "minecraft:wolf_spawn_egg", - "id": 441 - }, - { - "name": "minecraft:wood", - "id": -212 - }, - { - "name": "minecraft:wooden_axe", - "id": 313 - }, - { - "name": "minecraft:wooden_button", - "id": 143 - }, - { - "name": "minecraft:wooden_door", - "id": 361 - }, - { - "name": "minecraft:wooden_hoe", - "id": 331 - }, - { - "name": "minecraft:wooden_pickaxe", - "id": 312 - }, - { - "name": "minecraft:wooden_pressure_plate", - "id": 72 - }, - { - "name": "minecraft:wooden_shovel", - "id": 311 - }, - { - "name": "minecraft:wooden_slab", - "id": 158 - }, - { - "name": "minecraft:wooden_sword", - "id": 310 - }, - { - "name": "minecraft:wool", - "id": 702 - }, - { - "name": "minecraft:writable_book", - "id": 517 - }, - { - "name": "minecraft:written_book", - "id": 518 - }, - { - "name": "minecraft:yellow_candle", - "id": -417 - }, - { - "name": "minecraft:yellow_candle_cake", - "id": -434 - }, - { - "name": "minecraft:yellow_carpet", - "id": -600 - }, - { - "name": "minecraft:yellow_concrete", - "id": -631 - }, - { - "name": "minecraft:yellow_dye", - "id": 408 - }, - { - "name": "minecraft:yellow_flower", - "id": 37 - }, - { - "name": "minecraft:yellow_glazed_terracotta", - "id": 224 - }, - { - "name": "minecraft:yellow_shulker_box", - "id": -616 - }, - { - "name": "minecraft:yellow_wool", - "id": -558 - }, - { - "name": "minecraft:zoglin_spawn_egg", - "id": 500 - }, - { - "name": "minecraft:zombie_horse_spawn_egg", - "id": 470 - }, - { - "name": "minecraft:zombie_pigman_spawn_egg", - "id": 450 - }, - { - "name": "minecraft:zombie_spawn_egg", - "id": 449 - }, - { - "name": "minecraft:zombie_villager_spawn_egg", - "id": 479 - } -] \ No newline at end of file diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_20_30.json b/core/src/main/resources/bedrock/runtime_item_states.1_20_30.json deleted file mode 100644 index 861b29c8a..000000000 --- a/core/src/main/resources/bedrock/runtime_item_states.1_20_30.json +++ /dev/null @@ -1,5570 +0,0 @@ -[ - { - "name": "minecraft:acacia_boat", - "id": 381 - }, - { - "name": "minecraft:acacia_button", - "id": -140 - }, - { - "name": "minecraft:acacia_chest_boat", - "id": 649 - }, - { - "name": "minecraft:acacia_door", - "id": 563 - }, - { - "name": "minecraft:acacia_fence", - "id": -575 - }, - { - "name": "minecraft:acacia_fence_gate", - "id": 187 - }, - { - "name": "minecraft:acacia_hanging_sign", - "id": -504 - }, - { - "name": "minecraft:acacia_log", - "id": 162 - }, - { - "name": "minecraft:acacia_pressure_plate", - "id": -150 - }, - { - "name": "minecraft:acacia_sign", - "id": 586 - }, - { - "name": "minecraft:acacia_stairs", - "id": 163 - }, - { - "name": "minecraft:acacia_standing_sign", - "id": -190 - }, - { - "name": "minecraft:acacia_trapdoor", - "id": -145 - }, - { - "name": "minecraft:acacia_wall_sign", - "id": -191 - }, - { - "name": "minecraft:activator_rail", - "id": 126 - }, - { - "name": "minecraft:agent_spawn_egg", - "id": 489 - }, - { - "name": "minecraft:air", - "id": -158 - }, - { - "name": "minecraft:allay_spawn_egg", - "id": 638 - }, - { - "name": "minecraft:allow", - "id": 210 - }, - { - "name": "minecraft:amethyst_block", - "id": -327 - }, - { - "name": "minecraft:amethyst_cluster", - "id": -329 - }, - { - "name": "minecraft:amethyst_shard", - "id": 631 - }, - { - "name": "minecraft:ancient_debris", - "id": -271 - }, - { - "name": "minecraft:andesite_stairs", - "id": -171 - }, - { - "name": "minecraft:angler_pottery_sherd", - "id": 663 - }, - { - "name": "minecraft:anvil", - "id": 145 - }, - { - "name": "minecraft:apple", - "id": 257 - }, - { - "name": "minecraft:archer_pottery_sherd", - "id": 664 - }, - { - "name": "minecraft:armor_stand", - "id": 559 - }, - { - "name": "minecraft:arms_up_pottery_sherd", - "id": 665 - }, - { - "name": "minecraft:arrow", - "id": 303 - }, - { - "name": "minecraft:axolotl_bucket", - "id": 371 - }, - { - "name": "minecraft:axolotl_spawn_egg", - "id": 503 - }, - { - "name": "minecraft:azalea", - "id": -337 - }, - { - "name": "minecraft:azalea_leaves", - "id": -324 - }, - { - "name": "minecraft:azalea_leaves_flowered", - "id": -325 - }, - { - "name": "minecraft:baked_potato", - "id": 281 - }, - { - "name": "minecraft:balloon", - "id": 605 - }, - { - "name": "minecraft:bamboo", - "id": -163 - }, - { - "name": "minecraft:bamboo_block", - "id": -527 - }, - { - "name": "minecraft:bamboo_button", - "id": -511 - }, - { - "name": "minecraft:bamboo_chest_raft", - "id": 661 - }, - { - "name": "minecraft:bamboo_door", - "id": -517 - }, - { - "name": "minecraft:bamboo_double_slab", - "id": -521 - }, - { - "name": "minecraft:bamboo_fence", - "id": -515 - }, - { - "name": "minecraft:bamboo_fence_gate", - "id": -516 - }, - { - "name": "minecraft:bamboo_hanging_sign", - "id": -522 - }, - { - "name": "minecraft:bamboo_mosaic", - "id": -509 - }, - { - "name": "minecraft:bamboo_mosaic_double_slab", - "id": -525 - }, - { - "name": "minecraft:bamboo_mosaic_slab", - "id": -524 - }, - { - "name": "minecraft:bamboo_mosaic_stairs", - "id": -523 - }, - { - "name": "minecraft:bamboo_planks", - "id": -510 - }, - { - "name": "minecraft:bamboo_pressure_plate", - "id": -514 - }, - { - "name": "minecraft:bamboo_raft", - "id": 660 - }, - { - "name": "minecraft:bamboo_sapling", - "id": -164 - }, - { - "name": "minecraft:bamboo_sign", - "id": 659 - }, - { - "name": "minecraft:bamboo_slab", - "id": -513 - }, - { - "name": "minecraft:bamboo_stairs", - "id": -512 - }, - { - "name": "minecraft:bamboo_standing_sign", - "id": -518 - }, - { - "name": "minecraft:bamboo_trapdoor", - "id": -520 - }, - { - "name": "minecraft:bamboo_wall_sign", - "id": -519 - }, - { - "name": "minecraft:banner", - "id": 574 - }, - { - "name": "minecraft:banner_pattern", - "id": 716 - }, - { - "name": "minecraft:barrel", - "id": -203 - }, - { - "name": "minecraft:barrier", - "id": -161 - }, - { - "name": "minecraft:basalt", - "id": -234 - }, - { - "name": "minecraft:bat_spawn_egg", - "id": 455 - }, - { - "name": "minecraft:beacon", - "id": 138 - }, - { - "name": "minecraft:bed", - "id": 420 - }, - { - "name": "minecraft:bedrock", - "id": 7 - }, - { - "name": "minecraft:bee_nest", - "id": -218 - }, - { - "name": "minecraft:bee_spawn_egg", - "id": 496 - }, - { - "name": "minecraft:beef", - "id": 273 - }, - { - "name": "minecraft:beehive", - "id": -219 - }, - { - "name": "minecraft:beetroot", - "id": 285 - }, - { - "name": "minecraft:beetroot_seeds", - "id": 295 - }, - { - "name": "minecraft:beetroot_soup", - "id": 286 - }, - { - "name": "minecraft:bell", - "id": -206 - }, - { - "name": "minecraft:big_dripleaf", - "id": -323 - }, - { - "name": "minecraft:birch_boat", - "id": 378 - }, - { - "name": "minecraft:birch_button", - "id": -141 - }, - { - "name": "minecraft:birch_chest_boat", - "id": 646 - }, - { - "name": "minecraft:birch_door", - "id": 561 - }, - { - "name": "minecraft:birch_fence", - "id": -576 - }, - { - "name": "minecraft:birch_fence_gate", - "id": 184 - }, - { - "name": "minecraft:birch_hanging_sign", - "id": -502 - }, - { - "name": "minecraft:birch_log", - "id": -570 - }, - { - "name": "minecraft:birch_pressure_plate", - "id": -151 - }, - { - "name": "minecraft:birch_sign", - "id": 584 - }, - { - "name": "minecraft:birch_stairs", - "id": 135 - }, - { - "name": "minecraft:birch_standing_sign", - "id": -186 - }, - { - "name": "minecraft:birch_trapdoor", - "id": -146 - }, - { - "name": "minecraft:birch_wall_sign", - "id": -187 - }, - { - "name": "minecraft:black_candle", - "id": -428 - }, - { - "name": "minecraft:black_candle_cake", - "id": -445 - }, - { - "name": "minecraft:black_carpet", - "id": -611 - }, - { - "name": "minecraft:black_concrete", - "id": -642 - }, - { - "name": "minecraft:black_concrete_powder", - "id": -723 - }, - { - "name": "minecraft:black_dye", - "id": 397 - }, - { - "name": "minecraft:black_glazed_terracotta", - "id": 235 - }, - { - "name": "minecraft:black_shulker_box", - "id": -627 - }, - { - "name": "minecraft:black_stained_glass", - "id": -687 - }, - { - "name": "minecraft:black_stained_glass_pane", - "id": -657 - }, - { - "name": "minecraft:black_terracotta", - "id": -738 - }, - { - "name": "minecraft:black_wool", - "id": -554 - }, - { - "name": "minecraft:blackstone", - "id": -273 - }, - { - "name": "minecraft:blackstone_double_slab", - "id": -283 - }, - { - "name": "minecraft:blackstone_slab", - "id": -282 - }, - { - "name": "minecraft:blackstone_stairs", - "id": -276 - }, - { - "name": "minecraft:blackstone_wall", - "id": -277 - }, - { - "name": "minecraft:blade_pottery_sherd", - "id": 666 - }, - { - "name": "minecraft:blast_furnace", - "id": -196 - }, - { - "name": "minecraft:blaze_powder", - "id": 431 - }, - { - "name": "minecraft:blaze_rod", - "id": 425 - }, - { - "name": "minecraft:blaze_spawn_egg", - "id": 458 - }, - { - "name": "minecraft:bleach", - "id": 603 - }, - { - "name": "minecraft:blue_candle", - "id": -424 - }, - { - "name": "minecraft:blue_candle_cake", - "id": -441 - }, - { - "name": "minecraft:blue_carpet", - "id": -607 - }, - { - "name": "minecraft:blue_concrete", - "id": -638 - }, - { - "name": "minecraft:blue_concrete_powder", - "id": -719 - }, - { - "name": "minecraft:blue_dye", - "id": 401 - }, - { - "name": "minecraft:blue_glazed_terracotta", - "id": 231 - }, - { - "name": "minecraft:blue_ice", - "id": -11 - }, - { - "name": "minecraft:blue_shulker_box", - "id": -623 - }, - { - "name": "minecraft:blue_stained_glass", - "id": -683 - }, - { - "name": "minecraft:blue_stained_glass_pane", - "id": -653 - }, - { - "name": "minecraft:blue_terracotta", - "id": -734 - }, - { - "name": "minecraft:blue_wool", - "id": -563 - }, - { - "name": "minecraft:boat", - "id": 714 - }, - { - "name": "minecraft:bone", - "id": 417 - }, - { - "name": "minecraft:bone_block", - "id": 216 - }, - { - "name": "minecraft:bone_meal", - "id": 413 - }, - { - "name": "minecraft:book", - "id": 389 - }, - { - "name": "minecraft:bookshelf", - "id": 47 - }, - { - "name": "minecraft:border_block", - "id": 212 - }, - { - "name": "minecraft:bordure_indented_banner_pattern", - "id": 593 - }, - { - "name": "minecraft:bow", - "id": 302 - }, - { - "name": "minecraft:bowl", - "id": 323 - }, - { - "name": "minecraft:brain_coral", - "id": -581 - }, - { - "name": "minecraft:bread", - "id": 261 - }, - { - "name": "minecraft:brewer_pottery_sherd", - "id": 667 - }, - { - "name": "minecraft:brewing_stand", - "id": 433 - }, - { - "name": "minecraft:brick", - "id": 385 - }, - { - "name": "minecraft:brick_block", - "id": 45 - }, - { - "name": "minecraft:brick_stairs", - "id": 108 - }, - { - "name": "minecraft:brown_candle", - "id": -425 - }, - { - "name": "minecraft:brown_candle_cake", - "id": -442 - }, - { - "name": "minecraft:brown_carpet", - "id": -608 - }, - { - "name": "minecraft:brown_concrete", - "id": -639 - }, - { - "name": "minecraft:brown_concrete_powder", - "id": -720 - }, - { - "name": "minecraft:brown_dye", - "id": 400 - }, - { - "name": "minecraft:brown_glazed_terracotta", - "id": 232 - }, - { - "name": "minecraft:brown_mushroom", - "id": 39 - }, - { - "name": "minecraft:brown_mushroom_block", - "id": 99 - }, - { - "name": "minecraft:brown_shulker_box", - "id": -624 - }, - { - "name": "minecraft:brown_stained_glass", - "id": -684 - }, - { - "name": "minecraft:brown_stained_glass_pane", - "id": -654 - }, - { - "name": "minecraft:brown_terracotta", - "id": -735 - }, - { - "name": "minecraft:brown_wool", - "id": -555 - }, - { - "name": "minecraft:brush", - "id": 683 - }, - { - "name": "minecraft:bubble_column", - "id": -160 - }, - { - "name": "minecraft:bubble_coral", - "id": -582 - }, - { - "name": "minecraft:bucket", - "id": 362 - }, - { - "name": "minecraft:budding_amethyst", - "id": -328 - }, - { - "name": "minecraft:burn_pottery_sherd", - "id": 668 - }, - { - "name": "minecraft:cactus", - "id": 81 - }, - { - "name": "minecraft:cake", - "id": 419 - }, - { - "name": "minecraft:calcite", - "id": -326 - }, - { - "name": "minecraft:calibrated_sculk_sensor", - "id": -580 - }, - { - "name": "minecraft:camel_spawn_egg", - "id": 662 - }, - { - "name": "minecraft:camera", - "id": 600 - }, - { - "name": "minecraft:campfire", - "id": 596 - }, - { - "name": "minecraft:candle", - "id": -412 - }, - { - "name": "minecraft:candle_cake", - "id": -429 - }, - { - "name": "minecraft:carpet", - "id": 704 - }, - { - "name": "minecraft:carrot", - "id": 279 - }, - { - "name": "minecraft:carrot_on_a_stick", - "id": 524 - }, - { - "name": "minecraft:carrots", - "id": 141 - }, - { - "name": "minecraft:cartography_table", - "id": -200 - }, - { - "name": "minecraft:carved_pumpkin", - "id": -155 - }, - { - "name": "minecraft:cat_spawn_egg", - "id": 490 - }, - { - "name": "minecraft:cauldron", - "id": 434 - }, - { - "name": "minecraft:cave_spider_spawn_egg", - "id": 459 - }, - { - "name": "minecraft:cave_vines", - "id": -322 - }, - { - "name": "minecraft:cave_vines_body_with_berries", - "id": -375 - }, - { - "name": "minecraft:cave_vines_head_with_berries", - "id": -376 - }, - { - "name": "minecraft:chain", - "id": 626 - }, - { - "name": "minecraft:chain_command_block", - "id": 189 - }, - { - "name": "minecraft:chainmail_boots", - "id": 344 - }, - { - "name": "minecraft:chainmail_chestplate", - "id": 342 - }, - { - "name": "minecraft:chainmail_helmet", - "id": 341 - }, - { - "name": "minecraft:chainmail_leggings", - "id": 343 - }, - { - "name": "minecraft:charcoal", - "id": 305 - }, - { - "name": "minecraft:chemical_heat", - "id": 192 - }, - { - "name": "minecraft:chemistry_table", - "id": 238 - }, - { - "name": "minecraft:cherry_boat", - "id": 656 - }, - { - "name": "minecraft:cherry_button", - "id": -530 - }, - { - "name": "minecraft:cherry_chest_boat", - "id": 657 - }, - { - "name": "minecraft:cherry_door", - "id": -531 - }, - { - "name": "minecraft:cherry_double_slab", - "id": -540 - }, - { - "name": "minecraft:cherry_fence", - "id": -532 - }, - { - "name": "minecraft:cherry_fence_gate", - "id": -533 - }, - { - "name": "minecraft:cherry_hanging_sign", - "id": -534 - }, - { - "name": "minecraft:cherry_leaves", - "id": -548 - }, - { - "name": "minecraft:cherry_log", - "id": -536 - }, - { - "name": "minecraft:cherry_planks", - "id": -537 - }, - { - "name": "minecraft:cherry_pressure_plate", - "id": -538 - }, - { - "name": "minecraft:cherry_sapling", - "id": -547 - }, - { - "name": "minecraft:cherry_sign", - "id": 658 - }, - { - "name": "minecraft:cherry_slab", - "id": -539 - }, - { - "name": "minecraft:cherry_stairs", - "id": -541 - }, - { - "name": "minecraft:cherry_standing_sign", - "id": -542 - }, - { - "name": "minecraft:cherry_trapdoor", - "id": -543 - }, - { - "name": "minecraft:cherry_wall_sign", - "id": -544 - }, - { - "name": "minecraft:cherry_wood", - "id": -546 - }, - { - "name": "minecraft:chest", - "id": 54 - }, - { - "name": "minecraft:chest_boat", - "id": 652 - }, - { - "name": "minecraft:chest_minecart", - "id": 391 - }, - { - "name": "minecraft:chicken", - "id": 275 - }, - { - "name": "minecraft:chicken_spawn_egg", - "id": 437 - }, - { - "name": "minecraft:chiseled_bookshelf", - "id": -526 - }, - { - "name": "minecraft:chiseled_deepslate", - "id": -395 - }, - { - "name": "minecraft:chiseled_nether_bricks", - "id": -302 - }, - { - "name": "minecraft:chiseled_polished_blackstone", - "id": -279 - }, - { - "name": "minecraft:chorus_flower", - "id": 200 - }, - { - "name": "minecraft:chorus_fruit", - "id": 565 - }, - { - "name": "minecraft:chorus_plant", - "id": 240 - }, - { - "name": "minecraft:clay", - "id": 82 - }, - { - "name": "minecraft:clay_ball", - "id": 386 - }, - { - "name": "minecraft:client_request_placeholder_block", - "id": -465 - }, - { - "name": "minecraft:clock", - "id": 395 - }, - { - "name": "minecraft:coal", - "id": 304 - }, - { - "name": "minecraft:coal_block", - "id": 173 - }, - { - "name": "minecraft:coal_ore", - "id": 16 - }, - { - "name": "minecraft:coast_armor_trim_smithing_template", - "id": 687 - }, - { - "name": "minecraft:cobbled_deepslate", - "id": -379 - }, - { - "name": "minecraft:cobbled_deepslate_double_slab", - "id": -396 - }, - { - "name": "minecraft:cobbled_deepslate_slab", - "id": -380 - }, - { - "name": "minecraft:cobbled_deepslate_stairs", - "id": -381 - }, - { - "name": "minecraft:cobbled_deepslate_wall", - "id": -382 - }, - { - "name": "minecraft:cobblestone", - "id": 4 - }, - { - "name": "minecraft:cobblestone_wall", - "id": 139 - }, - { - "name": "minecraft:cocoa", - "id": 127 - }, - { - "name": "minecraft:cocoa_beans", - "id": 414 - }, - { - "name": "minecraft:cod", - "id": 264 - }, - { - "name": "minecraft:cod_bucket", - "id": 366 - }, - { - "name": "minecraft:cod_spawn_egg", - "id": 482 - }, - { - "name": "minecraft:colored_torch_bp", - "id": 204 - }, - { - "name": "minecraft:colored_torch_rg", - "id": 202 - }, - { - "name": "minecraft:command_block", - "id": 137 - }, - { - "name": "minecraft:command_block_minecart", - "id": 570 - }, - { - "name": "minecraft:comparator", - "id": 529 - }, - { - "name": "minecraft:compass", - "id": 393 - }, - { - "name": "minecraft:composter", - "id": -213 - }, - { - "name": "minecraft:compound", - "id": 601 - }, - { - "name": "minecraft:concrete", - "id": 709 - }, - { - "name": "minecraft:concrete_powder", - "id": 710 - }, - { - "name": "minecraft:conduit", - "id": -157 - }, - { - "name": "minecraft:cooked_beef", - "id": 274 - }, - { - "name": "minecraft:cooked_chicken", - "id": 276 - }, - { - "name": "minecraft:cooked_cod", - "id": 268 - }, - { - "name": "minecraft:cooked_mutton", - "id": 558 - }, - { - "name": "minecraft:cooked_porkchop", - "id": 263 - }, - { - "name": "minecraft:cooked_rabbit", - "id": 289 - }, - { - "name": "minecraft:cooked_salmon", - "id": 269 - }, - { - "name": "minecraft:cookie", - "id": 271 - }, - { - "name": "minecraft:copper_block", - "id": -340 - }, - { - "name": "minecraft:copper_ingot", - "id": 511 - }, - { - "name": "minecraft:copper_ore", - "id": -311 - }, - { - "name": "minecraft:coral", - "id": 707 - }, - { - "name": "minecraft:coral_block", - "id": -132 - }, - { - "name": "minecraft:coral_fan", - "id": -133 - }, - { - "name": "minecraft:coral_fan_dead", - "id": -134 - }, - { - "name": "minecraft:coral_fan_hang", - "id": -135 - }, - { - "name": "minecraft:coral_fan_hang2", - "id": -136 - }, - { - "name": "minecraft:coral_fan_hang3", - "id": -137 - }, - { - "name": "minecraft:cow_spawn_egg", - "id": 438 - }, - { - "name": "minecraft:cracked_deepslate_bricks", - "id": -410 - }, - { - "name": "minecraft:cracked_deepslate_tiles", - "id": -409 - }, - { - "name": "minecraft:cracked_nether_bricks", - "id": -303 - }, - { - "name": "minecraft:cracked_polished_blackstone_bricks", - "id": -280 - }, - { - "name": "minecraft:crafting_table", - "id": 58 - }, - { - "name": "minecraft:creeper_banner_pattern", - "id": 589 - }, - { - "name": "minecraft:creeper_spawn_egg", - "id": 443 - }, - { - "name": "minecraft:crimson_button", - "id": -260 - }, - { - "name": "minecraft:crimson_door", - "id": 623 - }, - { - "name": "minecraft:crimson_double_slab", - "id": -266 - }, - { - "name": "minecraft:crimson_fence", - "id": -256 - }, - { - "name": "minecraft:crimson_fence_gate", - "id": -258 - }, - { - "name": "minecraft:crimson_fungus", - "id": -228 - }, - { - "name": "minecraft:crimson_hanging_sign", - "id": -506 - }, - { - "name": "minecraft:crimson_hyphae", - "id": -299 - }, - { - "name": "minecraft:crimson_nylium", - "id": -232 - }, - { - "name": "minecraft:crimson_planks", - "id": -242 - }, - { - "name": "minecraft:crimson_pressure_plate", - "id": -262 - }, - { - "name": "minecraft:crimson_roots", - "id": -223 - }, - { - "name": "minecraft:crimson_sign", - "id": 621 - }, - { - "name": "minecraft:crimson_slab", - "id": -264 - }, - { - "name": "minecraft:crimson_stairs", - "id": -254 - }, - { - "name": "minecraft:crimson_standing_sign", - "id": -250 - }, - { - "name": "minecraft:crimson_stem", - "id": -225 - }, - { - "name": "minecraft:crimson_trapdoor", - "id": -246 - }, - { - "name": "minecraft:crimson_wall_sign", - "id": -252 - }, - { - "name": "minecraft:crossbow", - "id": 582 - }, - { - "name": "minecraft:crying_obsidian", - "id": -289 - }, - { - "name": "minecraft:cut_copper", - "id": -347 - }, - { - "name": "minecraft:cut_copper_slab", - "id": -361 - }, - { - "name": "minecraft:cut_copper_stairs", - "id": -354 - }, - { - "name": "minecraft:cyan_candle", - "id": -422 - }, - { - "name": "minecraft:cyan_candle_cake", - "id": -439 - }, - { - "name": "minecraft:cyan_carpet", - "id": -605 - }, - { - "name": "minecraft:cyan_concrete", - "id": -636 - }, - { - "name": "minecraft:cyan_concrete_powder", - "id": -717 - }, - { - "name": "minecraft:cyan_dye", - "id": 403 - }, - { - "name": "minecraft:cyan_glazed_terracotta", - "id": 229 - }, - { - "name": "minecraft:cyan_shulker_box", - "id": -621 - }, - { - "name": "minecraft:cyan_stained_glass", - "id": -681 - }, - { - "name": "minecraft:cyan_stained_glass_pane", - "id": -651 - }, - { - "name": "minecraft:cyan_terracotta", - "id": -732 - }, - { - "name": "minecraft:cyan_wool", - "id": -561 - }, - { - "name": "minecraft:danger_pottery_sherd", - "id": 669 - }, - { - "name": "minecraft:dark_oak_boat", - "id": 382 - }, - { - "name": "minecraft:dark_oak_button", - "id": -142 - }, - { - "name": "minecraft:dark_oak_chest_boat", - "id": 650 - }, - { - "name": "minecraft:dark_oak_door", - "id": 564 - }, - { - "name": "minecraft:dark_oak_fence", - "id": -577 - }, - { - "name": "minecraft:dark_oak_fence_gate", - "id": 186 - }, - { - "name": "minecraft:dark_oak_hanging_sign", - "id": -505 - }, - { - "name": "minecraft:dark_oak_log", - "id": -572 - }, - { - "name": "minecraft:dark_oak_pressure_plate", - "id": -152 - }, - { - "name": "minecraft:dark_oak_sign", - "id": 587 - }, - { - "name": "minecraft:dark_oak_stairs", - "id": 164 - }, - { - "name": "minecraft:dark_oak_trapdoor", - "id": -147 - }, - { - "name": "minecraft:dark_prismarine_stairs", - "id": -3 - }, - { - "name": "minecraft:darkoak_standing_sign", - "id": -192 - }, - { - "name": "minecraft:darkoak_wall_sign", - "id": -193 - }, - { - "name": "minecraft:daylight_detector", - "id": 151 - }, - { - "name": "minecraft:daylight_detector_inverted", - "id": 178 - }, - { - "name": "minecraft:dead_brain_coral", - "id": -586 - }, - { - "name": "minecraft:dead_bubble_coral", - "id": -587 - }, - { - "name": "minecraft:dead_fire_coral", - "id": -588 - }, - { - "name": "minecraft:dead_horn_coral", - "id": -589 - }, - { - "name": "minecraft:dead_tube_coral", - "id": -585 - }, - { - "name": "minecraft:deadbush", - "id": 32 - }, - { - "name": "minecraft:decorated_pot", - "id": -551 - }, - { - "name": "minecraft:deepslate", - "id": -378 - }, - { - "name": "minecraft:deepslate_brick_double_slab", - "id": -399 - }, - { - "name": "minecraft:deepslate_brick_slab", - "id": -392 - }, - { - "name": "minecraft:deepslate_brick_stairs", - "id": -393 - }, - { - "name": "minecraft:deepslate_brick_wall", - "id": -394 - }, - { - "name": "minecraft:deepslate_bricks", - "id": -391 - }, - { - "name": "minecraft:deepslate_coal_ore", - "id": -406 - }, - { - "name": "minecraft:deepslate_copper_ore", - "id": -408 - }, - { - "name": "minecraft:deepslate_diamond_ore", - "id": -405 - }, - { - "name": "minecraft:deepslate_emerald_ore", - "id": -407 - }, - { - "name": "minecraft:deepslate_gold_ore", - "id": -402 - }, - { - "name": "minecraft:deepslate_iron_ore", - "id": -401 - }, - { - "name": "minecraft:deepslate_lapis_ore", - "id": -400 - }, - { - "name": "minecraft:deepslate_redstone_ore", - "id": -403 - }, - { - "name": "minecraft:deepslate_tile_double_slab", - "id": -398 - }, - { - "name": "minecraft:deepslate_tile_slab", - "id": -388 - }, - { - "name": "minecraft:deepslate_tile_stairs", - "id": -389 - }, - { - "name": "minecraft:deepslate_tile_wall", - "id": -390 - }, - { - "name": "minecraft:deepslate_tiles", - "id": -387 - }, - { - "name": "minecraft:deny", - "id": 211 - }, - { - "name": "minecraft:detector_rail", - "id": 28 - }, - { - "name": "minecraft:diamond", - "id": 306 - }, - { - "name": "minecraft:diamond_axe", - "id": 321 - }, - { - "name": "minecraft:diamond_block", - "id": 57 - }, - { - "name": "minecraft:diamond_boots", - "id": 352 - }, - { - "name": "minecraft:diamond_chestplate", - "id": 350 - }, - { - "name": "minecraft:diamond_helmet", - "id": 349 - }, - { - "name": "minecraft:diamond_hoe", - "id": 334 - }, - { - "name": "minecraft:diamond_horse_armor", - "id": 540 - }, - { - "name": "minecraft:diamond_leggings", - "id": 351 - }, - { - "name": "minecraft:diamond_ore", - "id": 56 - }, - { - "name": "minecraft:diamond_pickaxe", - "id": 320 - }, - { - "name": "minecraft:diamond_shovel", - "id": 319 - }, - { - "name": "minecraft:diamond_sword", - "id": 318 - }, - { - "name": "minecraft:diorite_stairs", - "id": -170 - }, - { - "name": "minecraft:dirt", - "id": 3 - }, - { - "name": "minecraft:dirt_with_roots", - "id": -318 - }, - { - "name": "minecraft:disc_fragment_5", - "id": 644 - }, - { - "name": "minecraft:dispenser", - "id": 23 - }, - { - "name": "minecraft:dolphin_spawn_egg", - "id": 486 - }, - { - "name": "minecraft:donkey_spawn_egg", - "id": 467 - }, - { - "name": "minecraft:double_cut_copper_slab", - "id": -368 - }, - { - "name": "minecraft:double_plant", - "id": 175 - }, - { - "name": "minecraft:double_stone_block_slab", - "id": 43 - }, - { - "name": "minecraft:double_stone_block_slab2", - "id": 181 - }, - { - "name": "minecraft:double_stone_block_slab3", - "id": -167 - }, - { - "name": "minecraft:double_stone_block_slab4", - "id": -168 - }, - { - "name": "minecraft:double_wooden_slab", - "id": 157 - }, - { - "name": "minecraft:dragon_breath", - "id": 567 - }, - { - "name": "minecraft:dragon_egg", - "id": 122 - }, - { - "name": "minecraft:dried_kelp", - "id": 270 - }, - { - "name": "minecraft:dried_kelp_block", - "id": -139 - }, - { - "name": "minecraft:dripstone_block", - "id": -317 - }, - { - "name": "minecraft:dropper", - "id": 125 - }, - { - "name": "minecraft:drowned_spawn_egg", - "id": 485 - }, - { - "name": "minecraft:dune_armor_trim_smithing_template", - "id": 686 - }, - { - "name": "minecraft:dye", - "id": 715 - }, - { - "name": "minecraft:echo_shard", - "id": 654 - }, - { - "name": "minecraft:egg", - "id": 392 - }, - { - "name": "minecraft:elder_guardian_spawn_egg", - "id": 473 - }, - { - "name": "minecraft:element_0", - "id": 36 - }, - { - "name": "minecraft:element_1", - "id": -12 - }, - { - "name": "minecraft:element_10", - "id": -21 - }, - { - "name": "minecraft:element_100", - "id": -111 - }, - { - "name": "minecraft:element_101", - "id": -112 - }, - { - "name": "minecraft:element_102", - "id": -113 - }, - { - "name": "minecraft:element_103", - "id": -114 - }, - { - "name": "minecraft:element_104", - "id": -115 - }, - { - "name": "minecraft:element_105", - "id": -116 - }, - { - "name": "minecraft:element_106", - "id": -117 - }, - { - "name": "minecraft:element_107", - "id": -118 - }, - { - "name": "minecraft:element_108", - "id": -119 - }, - { - "name": "minecraft:element_109", - "id": -120 - }, - { - "name": "minecraft:element_11", - "id": -22 - }, - { - "name": "minecraft:element_110", - "id": -121 - }, - { - "name": "minecraft:element_111", - "id": -122 - }, - { - "name": "minecraft:element_112", - "id": -123 - }, - { - "name": "minecraft:element_113", - "id": -124 - }, - { - "name": "minecraft:element_114", - "id": -125 - }, - { - "name": "minecraft:element_115", - "id": -126 - }, - { - "name": "minecraft:element_116", - "id": -127 - }, - { - "name": "minecraft:element_117", - "id": -128 - }, - { - "name": "minecraft:element_118", - "id": -129 - }, - { - "name": "minecraft:element_12", - "id": -23 - }, - { - "name": "minecraft:element_13", - "id": -24 - }, - { - "name": "minecraft:element_14", - "id": -25 - }, - { - "name": "minecraft:element_15", - "id": -26 - }, - { - "name": "minecraft:element_16", - "id": -27 - }, - { - "name": "minecraft:element_17", - "id": -28 - }, - { - "name": "minecraft:element_18", - "id": -29 - }, - { - "name": "minecraft:element_19", - "id": -30 - }, - { - "name": "minecraft:element_2", - "id": -13 - }, - { - "name": "minecraft:element_20", - "id": -31 - }, - { - "name": "minecraft:element_21", - "id": -32 - }, - { - "name": "minecraft:element_22", - "id": -33 - }, - { - "name": "minecraft:element_23", - "id": -34 - }, - { - "name": "minecraft:element_24", - "id": -35 - }, - { - "name": "minecraft:element_25", - "id": -36 - }, - { - "name": "minecraft:element_26", - "id": -37 - }, - { - "name": "minecraft:element_27", - "id": -38 - }, - { - "name": "minecraft:element_28", - "id": -39 - }, - { - "name": "minecraft:element_29", - "id": -40 - }, - { - "name": "minecraft:element_3", - "id": -14 - }, - { - "name": "minecraft:element_30", - "id": -41 - }, - { - "name": "minecraft:element_31", - "id": -42 - }, - { - "name": "minecraft:element_32", - "id": -43 - }, - { - "name": "minecraft:element_33", - "id": -44 - }, - { - "name": "minecraft:element_34", - "id": -45 - }, - { - "name": "minecraft:element_35", - "id": -46 - }, - { - "name": "minecraft:element_36", - "id": -47 - }, - { - "name": "minecraft:element_37", - "id": -48 - }, - { - "name": "minecraft:element_38", - "id": -49 - }, - { - "name": "minecraft:element_39", - "id": -50 - }, - { - "name": "minecraft:element_4", - "id": -15 - }, - { - "name": "minecraft:element_40", - "id": -51 - }, - { - "name": "minecraft:element_41", - "id": -52 - }, - { - "name": "minecraft:element_42", - "id": -53 - }, - { - "name": "minecraft:element_43", - "id": -54 - }, - { - "name": "minecraft:element_44", - "id": -55 - }, - { - "name": "minecraft:element_45", - "id": -56 - }, - { - "name": "minecraft:element_46", - "id": -57 - }, - { - "name": "minecraft:element_47", - "id": -58 - }, - { - "name": "minecraft:element_48", - "id": -59 - }, - { - "name": "minecraft:element_49", - "id": -60 - }, - { - "name": "minecraft:element_5", - "id": -16 - }, - { - "name": "minecraft:element_50", - "id": -61 - }, - { - "name": "minecraft:element_51", - "id": -62 - }, - { - "name": "minecraft:element_52", - "id": -63 - }, - { - "name": "minecraft:element_53", - "id": -64 - }, - { - "name": "minecraft:element_54", - "id": -65 - }, - { - "name": "minecraft:element_55", - "id": -66 - }, - { - "name": "minecraft:element_56", - "id": -67 - }, - { - "name": "minecraft:element_57", - "id": -68 - }, - { - "name": "minecraft:element_58", - "id": -69 - }, - { - "name": "minecraft:element_59", - "id": -70 - }, - { - "name": "minecraft:element_6", - "id": -17 - }, - { - "name": "minecraft:element_60", - "id": -71 - }, - { - "name": "minecraft:element_61", - "id": -72 - }, - { - "name": "minecraft:element_62", - "id": -73 - }, - { - "name": "minecraft:element_63", - "id": -74 - }, - { - "name": "minecraft:element_64", - "id": -75 - }, - { - "name": "minecraft:element_65", - "id": -76 - }, - { - "name": "minecraft:element_66", - "id": -77 - }, - { - "name": "minecraft:element_67", - "id": -78 - }, - { - "name": "minecraft:element_68", - "id": -79 - }, - { - "name": "minecraft:element_69", - "id": -80 - }, - { - "name": "minecraft:element_7", - "id": -18 - }, - { - "name": "minecraft:element_70", - "id": -81 - }, - { - "name": "minecraft:element_71", - "id": -82 - }, - { - "name": "minecraft:element_72", - "id": -83 - }, - { - "name": "minecraft:element_73", - "id": -84 - }, - { - "name": "minecraft:element_74", - "id": -85 - }, - { - "name": "minecraft:element_75", - "id": -86 - }, - { - "name": "minecraft:element_76", - "id": -87 - }, - { - "name": "minecraft:element_77", - "id": -88 - }, - { - "name": "minecraft:element_78", - "id": -89 - }, - { - "name": "minecraft:element_79", - "id": -90 - }, - { - "name": "minecraft:element_8", - "id": -19 - }, - { - "name": "minecraft:element_80", - "id": -91 - }, - { - "name": "minecraft:element_81", - "id": -92 - }, - { - "name": "minecraft:element_82", - "id": -93 - }, - { - "name": "minecraft:element_83", - "id": -94 - }, - { - "name": "minecraft:element_84", - "id": -95 - }, - { - "name": "minecraft:element_85", - "id": -96 - }, - { - "name": "minecraft:element_86", - "id": -97 - }, - { - "name": "minecraft:element_87", - "id": -98 - }, - { - "name": "minecraft:element_88", - "id": -99 - }, - { - "name": "minecraft:element_89", - "id": -100 - }, - { - "name": "minecraft:element_9", - "id": -20 - }, - { - "name": "minecraft:element_90", - "id": -101 - }, - { - "name": "minecraft:element_91", - "id": -102 - }, - { - "name": "minecraft:element_92", - "id": -103 - }, - { - "name": "minecraft:element_93", - "id": -104 - }, - { - "name": "minecraft:element_94", - "id": -105 - }, - { - "name": "minecraft:element_95", - "id": -106 - }, - { - "name": "minecraft:element_96", - "id": -107 - }, - { - "name": "minecraft:element_97", - "id": -108 - }, - { - "name": "minecraft:element_98", - "id": -109 - }, - { - "name": "minecraft:element_99", - "id": -110 - }, - { - "name": "minecraft:elytra", - "id": 571 - }, - { - "name": "minecraft:emerald", - "id": 519 - }, - { - "name": "minecraft:emerald_block", - "id": 133 - }, - { - "name": "minecraft:emerald_ore", - "id": 129 - }, - { - "name": "minecraft:empty_map", - "id": 522 - }, - { - "name": "minecraft:enchanted_book", - "id": 528 - }, - { - "name": "minecraft:enchanted_golden_apple", - "id": 259 - }, - { - "name": "minecraft:enchanting_table", - "id": 116 - }, - { - "name": "minecraft:end_brick_stairs", - "id": -178 - }, - { - "name": "minecraft:end_bricks", - "id": 206 - }, - { - "name": "minecraft:end_crystal", - "id": 718 - }, - { - "name": "minecraft:end_gateway", - "id": 209 - }, - { - "name": "minecraft:end_portal", - "id": 119 - }, - { - "name": "minecraft:end_portal_frame", - "id": 120 - }, - { - "name": "minecraft:end_rod", - "id": 208 - }, - { - "name": "minecraft:end_stone", - "id": 121 - }, - { - "name": "minecraft:ender_chest", - "id": 130 - }, - { - "name": "minecraft:ender_dragon_spawn_egg", - "id": 508 - }, - { - "name": "minecraft:ender_eye", - "id": 435 - }, - { - "name": "minecraft:ender_pearl", - "id": 424 - }, - { - "name": "minecraft:enderman_spawn_egg", - "id": 444 - }, - { - "name": "minecraft:endermite_spawn_egg", - "id": 462 - }, - { - "name": "minecraft:evoker_spawn_egg", - "id": 477 - }, - { - "name": "minecraft:experience_bottle", - "id": 515 - }, - { - "name": "minecraft:explorer_pottery_sherd", - "id": 670 - }, - { - "name": "minecraft:exposed_copper", - "id": -341 - }, - { - "name": "minecraft:exposed_cut_copper", - "id": -348 - }, - { - "name": "minecraft:exposed_cut_copper_slab", - "id": -362 - }, - { - "name": "minecraft:exposed_cut_copper_stairs", - "id": -355 - }, - { - "name": "minecraft:exposed_double_cut_copper_slab", - "id": -369 - }, - { - "name": "minecraft:eye_armor_trim_smithing_template", - "id": 690 - }, - { - "name": "minecraft:farmland", - "id": 60 - }, - { - "name": "minecraft:feather", - "id": 329 - }, - { - "name": "minecraft:fence", - "id": 706 - }, - { - "name": "minecraft:fence_gate", - "id": 107 - }, - { - "name": "minecraft:fermented_spider_eye", - "id": 430 - }, - { - "name": "minecraft:field_masoned_banner_pattern", - "id": 592 - }, - { - "name": "minecraft:filled_map", - "id": 422 - }, - { - "name": "minecraft:fire", - "id": 51 - }, - { - "name": "minecraft:fire_charge", - "id": 516 - }, - { - "name": "minecraft:fire_coral", - "id": -583 - }, - { - "name": "minecraft:firework_rocket", - "id": 526 - }, - { - "name": "minecraft:firework_star", - "id": 527 - }, - { - "name": "minecraft:fishing_rod", - "id": 394 - }, - { - "name": "minecraft:fletching_table", - "id": -201 - }, - { - "name": "minecraft:flint", - "id": 358 - }, - { - "name": "minecraft:flint_and_steel", - "id": 301 - }, - { - "name": "minecraft:flower_banner_pattern", - "id": 588 - }, - { - "name": "minecraft:flower_pot", - "id": 521 - }, - { - "name": "minecraft:flowering_azalea", - "id": -338 - }, - { - "name": "minecraft:flowing_lava", - "id": 10 - }, - { - "name": "minecraft:flowing_water", - "id": 8 - }, - { - "name": "minecraft:fox_spawn_egg", - "id": 492 - }, - { - "name": "minecraft:frame", - "id": 520 - }, - { - "name": "minecraft:friend_pottery_sherd", - "id": 671 - }, - { - "name": "minecraft:frog_spawn", - "id": -468 - }, - { - "name": "minecraft:frog_spawn_egg", - "id": 635 - }, - { - "name": "minecraft:frosted_ice", - "id": 207 - }, - { - "name": "minecraft:furnace", - "id": 61 - }, - { - "name": "minecraft:ghast_spawn_egg", - "id": 456 - }, - { - "name": "minecraft:ghast_tear", - "id": 426 - }, - { - "name": "minecraft:gilded_blackstone", - "id": -281 - }, - { - "name": "minecraft:glass", - "id": 20 - }, - { - "name": "minecraft:glass_bottle", - "id": 429 - }, - { - "name": "minecraft:glass_pane", - "id": 102 - }, - { - "name": "minecraft:glistering_melon_slice", - "id": 436 - }, - { - "name": "minecraft:globe_banner_pattern", - "id": 595 - }, - { - "name": "minecraft:glow_berries", - "id": 719 - }, - { - "name": "minecraft:glow_frame", - "id": 630 - }, - { - "name": "minecraft:glow_ink_sac", - "id": 510 - }, - { - "name": "minecraft:glow_lichen", - "id": -411 - }, - { - "name": "minecraft:glow_squid_spawn_egg", - "id": 505 - }, - { - "name": "minecraft:glow_stick", - "id": 608 - }, - { - "name": "minecraft:glowingobsidian", - "id": 246 - }, - { - "name": "minecraft:glowstone", - "id": 89 - }, - { - "name": "minecraft:glowstone_dust", - "id": 396 - }, - { - "name": "minecraft:goat_horn", - "id": 634 - }, - { - "name": "minecraft:goat_spawn_egg", - "id": 504 - }, - { - "name": "minecraft:gold_block", - "id": 41 - }, - { - "name": "minecraft:gold_ingot", - "id": 308 - }, - { - "name": "minecraft:gold_nugget", - "id": 427 - }, - { - "name": "minecraft:gold_ore", - "id": 14 - }, - { - "name": "minecraft:golden_apple", - "id": 258 - }, - { - "name": "minecraft:golden_axe", - "id": 327 - }, - { - "name": "minecraft:golden_boots", - "id": 356 - }, - { - "name": "minecraft:golden_carrot", - "id": 283 - }, - { - "name": "minecraft:golden_chestplate", - "id": 354 - }, - { - "name": "minecraft:golden_helmet", - "id": 353 - }, - { - "name": "minecraft:golden_hoe", - "id": 335 - }, - { - "name": "minecraft:golden_horse_armor", - "id": 539 - }, - { - "name": "minecraft:golden_leggings", - "id": 355 - }, - { - "name": "minecraft:golden_pickaxe", - "id": 326 - }, - { - "name": "minecraft:golden_rail", - "id": 27 - }, - { - "name": "minecraft:golden_shovel", - "id": 325 - }, - { - "name": "minecraft:golden_sword", - "id": 324 - }, - { - "name": "minecraft:granite_stairs", - "id": -169 - }, - { - "name": "minecraft:grass", - "id": 2 - }, - { - "name": "minecraft:grass_path", - "id": 198 - }, - { - "name": "minecraft:gravel", - "id": 13 - }, - { - "name": "minecraft:gray_candle", - "id": -420 - }, - { - "name": "minecraft:gray_candle_cake", - "id": -437 - }, - { - "name": "minecraft:gray_carpet", - "id": -603 - }, - { - "name": "minecraft:gray_concrete", - "id": -634 - }, - { - "name": "minecraft:gray_concrete_powder", - "id": -715 - }, - { - "name": "minecraft:gray_dye", - "id": 405 - }, - { - "name": "minecraft:gray_glazed_terracotta", - "id": 227 - }, - { - "name": "minecraft:gray_shulker_box", - "id": -619 - }, - { - "name": "minecraft:gray_stained_glass", - "id": -679 - }, - { - "name": "minecraft:gray_stained_glass_pane", - "id": -649 - }, - { - "name": "minecraft:gray_terracotta", - "id": -730 - }, - { - "name": "minecraft:gray_wool", - "id": -553 - }, - { - "name": "minecraft:green_candle", - "id": -426 - }, - { - "name": "minecraft:green_candle_cake", - "id": -443 - }, - { - "name": "minecraft:green_carpet", - "id": -609 - }, - { - "name": "minecraft:green_concrete", - "id": -640 - }, - { - "name": "minecraft:green_concrete_powder", - "id": -721 - }, - { - "name": "minecraft:green_dye", - "id": 399 - }, - { - "name": "minecraft:green_glazed_terracotta", - "id": 233 - }, - { - "name": "minecraft:green_shulker_box", - "id": -625 - }, - { - "name": "minecraft:green_stained_glass", - "id": -685 - }, - { - "name": "minecraft:green_stained_glass_pane", - "id": -655 - }, - { - "name": "minecraft:green_terracotta", - "id": -736 - }, - { - "name": "minecraft:green_wool", - "id": -560 - }, - { - "name": "minecraft:grindstone", - "id": -195 - }, - { - "name": "minecraft:guardian_spawn_egg", - "id": 463 - }, - { - "name": "minecraft:gunpowder", - "id": 330 - }, - { - "name": "minecraft:hanging_roots", - "id": -319 - }, - { - "name": "minecraft:hard_glass", - "id": 253 - }, - { - "name": "minecraft:hard_glass_pane", - "id": 190 - }, - { - "name": "minecraft:hard_stained_glass", - "id": 254 - }, - { - "name": "minecraft:hard_stained_glass_pane", - "id": 191 - }, - { - "name": "minecraft:hardened_clay", - "id": 172 - }, - { - "name": "minecraft:hay_block", - "id": 170 - }, - { - "name": "minecraft:heart_of_the_sea", - "id": 578 - }, - { - "name": "minecraft:heart_pottery_sherd", - "id": 672 - }, - { - "name": "minecraft:heartbreak_pottery_sherd", - "id": 673 - }, - { - "name": "minecraft:heavy_weighted_pressure_plate", - "id": 148 - }, - { - "name": "minecraft:hoglin_spawn_egg", - "id": 498 - }, - { - "name": "minecraft:honey_block", - "id": -220 - }, - { - "name": "minecraft:honey_bottle", - "id": 599 - }, - { - "name": "minecraft:honeycomb", - "id": 598 - }, - { - "name": "minecraft:honeycomb_block", - "id": -221 - }, - { - "name": "minecraft:hopper", - "id": 534 - }, - { - "name": "minecraft:hopper_minecart", - "id": 533 - }, - { - "name": "minecraft:horn_coral", - "id": -584 - }, - { - "name": "minecraft:horse_spawn_egg", - "id": 460 - }, - { - "name": "minecraft:host_armor_trim_smithing_template", - "id": 700 - }, - { - "name": "minecraft:howl_pottery_sherd", - "id": 674 - }, - { - "name": "minecraft:husk_spawn_egg", - "id": 465 - }, - { - "name": "minecraft:ice", - "id": 79 - }, - { - "name": "minecraft:ice_bomb", - "id": 602 - }, - { - "name": "minecraft:infested_deepslate", - "id": -454 - }, - { - "name": "minecraft:info_update", - "id": 248 - }, - { - "name": "minecraft:info_update2", - "id": 249 - }, - { - "name": "minecraft:ink_sac", - "id": 415 - }, - { - "name": "minecraft:invisible_bedrock", - "id": 95 - }, - { - "name": "minecraft:iron_axe", - "id": 300 - }, - { - "name": "minecraft:iron_bars", - "id": 101 - }, - { - "name": "minecraft:iron_block", - "id": 42 - }, - { - "name": "minecraft:iron_boots", - "id": 348 - }, - { - "name": "minecraft:iron_chestplate", - "id": 346 - }, - { - "name": "minecraft:iron_door", - "id": 374 - }, - { - "name": "minecraft:iron_golem_spawn_egg", - "id": 506 - }, - { - "name": "minecraft:iron_helmet", - "id": 345 - }, - { - "name": "minecraft:iron_hoe", - "id": 333 - }, - { - "name": "minecraft:iron_horse_armor", - "id": 538 - }, - { - "name": "minecraft:iron_ingot", - "id": 307 - }, - { - "name": "minecraft:iron_leggings", - "id": 347 - }, - { - "name": "minecraft:iron_nugget", - "id": 576 - }, - { - "name": "minecraft:iron_ore", - "id": 15 - }, - { - "name": "minecraft:iron_pickaxe", - "id": 299 - }, - { - "name": "minecraft:iron_shovel", - "id": 298 - }, - { - "name": "minecraft:iron_sword", - "id": 309 - }, - { - "name": "minecraft:iron_trapdoor", - "id": 167 - }, - { - "name": "minecraft:item.acacia_door", - "id": 196 - }, - { - "name": "minecraft:item.bed", - "id": 26 - }, - { - "name": "minecraft:item.beetroot", - "id": 244 - }, - { - "name": "minecraft:item.birch_door", - "id": 194 - }, - { - "name": "minecraft:item.brewing_stand", - "id": 117 - }, - { - "name": "minecraft:item.cake", - "id": 92 - }, - { - "name": "minecraft:item.camera", - "id": 242 - }, - { - "name": "minecraft:item.campfire", - "id": -209 - }, - { - "name": "minecraft:item.cauldron", - "id": 118 - }, - { - "name": "minecraft:item.chain", - "id": -286 - }, - { - "name": "minecraft:item.crimson_door", - "id": -244 - }, - { - "name": "minecraft:item.dark_oak_door", - "id": 197 - }, - { - "name": "minecraft:item.flower_pot", - "id": 140 - }, - { - "name": "minecraft:item.frame", - "id": 199 - }, - { - "name": "minecraft:item.glow_frame", - "id": -339 - }, - { - "name": "minecraft:item.hopper", - "id": 154 - }, - { - "name": "minecraft:item.iron_door", - "id": 71 - }, - { - "name": "minecraft:item.jungle_door", - "id": 195 - }, - { - "name": "minecraft:item.kelp", - "id": -138 - }, - { - "name": "minecraft:item.mangrove_door", - "id": -493 - }, - { - "name": "minecraft:item.nether_sprouts", - "id": -238 - }, - { - "name": "minecraft:item.nether_wart", - "id": 115 - }, - { - "name": "minecraft:item.reeds", - "id": 83 - }, - { - "name": "minecraft:item.skull", - "id": 144 - }, - { - "name": "minecraft:item.soul_campfire", - "id": -290 - }, - { - "name": "minecraft:item.spruce_door", - "id": 193 - }, - { - "name": "minecraft:item.warped_door", - "id": -245 - }, - { - "name": "minecraft:item.wheat", - "id": 59 - }, - { - "name": "minecraft:item.wooden_door", - "id": 64 - }, - { - "name": "minecraft:jigsaw", - "id": -211 - }, - { - "name": "minecraft:jukebox", - "id": 84 - }, - { - "name": "minecraft:jungle_boat", - "id": 379 - }, - { - "name": "minecraft:jungle_button", - "id": -143 - }, - { - "name": "minecraft:jungle_chest_boat", - "id": 647 - }, - { - "name": "minecraft:jungle_door", - "id": 562 - }, - { - "name": "minecraft:jungle_fence", - "id": -578 - }, - { - "name": "minecraft:jungle_fence_gate", - "id": 185 - }, - { - "name": "minecraft:jungle_hanging_sign", - "id": -503 - }, - { - "name": "minecraft:jungle_log", - "id": -571 - }, - { - "name": "minecraft:jungle_pressure_plate", - "id": -153 - }, - { - "name": "minecraft:jungle_sign", - "id": 585 - }, - { - "name": "minecraft:jungle_stairs", - "id": 136 - }, - { - "name": "minecraft:jungle_standing_sign", - "id": -188 - }, - { - "name": "minecraft:jungle_trapdoor", - "id": -148 - }, - { - "name": "minecraft:jungle_wall_sign", - "id": -189 - }, - { - "name": "minecraft:kelp", - "id": 384 - }, - { - "name": "minecraft:ladder", - "id": 65 - }, - { - "name": "minecraft:lantern", - "id": -208 - }, - { - "name": "minecraft:lapis_block", - "id": 22 - }, - { - "name": "minecraft:lapis_lazuli", - "id": 416 - }, - { - "name": "minecraft:lapis_ore", - "id": 21 - }, - { - "name": "minecraft:large_amethyst_bud", - "id": -330 - }, - { - "name": "minecraft:lava", - "id": 11 - }, - { - "name": "minecraft:lava_bucket", - "id": 365 - }, - { - "name": "minecraft:lead", - "id": 554 - }, - { - "name": "minecraft:leather", - "id": 383 - }, - { - "name": "minecraft:leather_boots", - "id": 340 - }, - { - "name": "minecraft:leather_chestplate", - "id": 338 - }, - { - "name": "minecraft:leather_helmet", - "id": 337 - }, - { - "name": "minecraft:leather_horse_armor", - "id": 537 - }, - { - "name": "minecraft:leather_leggings", - "id": 339 - }, - { - "name": "minecraft:leaves", - "id": 18 - }, - { - "name": "minecraft:leaves2", - "id": 161 - }, - { - "name": "minecraft:lectern", - "id": -194 - }, - { - "name": "minecraft:lever", - "id": 69 - }, - { - "name": "minecraft:light_block", - "id": -215 - }, - { - "name": "minecraft:light_blue_candle", - "id": -416 - }, - { - "name": "minecraft:light_blue_candle_cake", - "id": -433 - }, - { - "name": "minecraft:light_blue_carpet", - "id": -599 - }, - { - "name": "minecraft:light_blue_concrete", - "id": -630 - }, - { - "name": "minecraft:light_blue_concrete_powder", - "id": -711 - }, - { - "name": "minecraft:light_blue_dye", - "id": 409 - }, - { - "name": "minecraft:light_blue_glazed_terracotta", - "id": 223 - }, - { - "name": "minecraft:light_blue_shulker_box", - "id": -615 - }, - { - "name": "minecraft:light_blue_stained_glass", - "id": -675 - }, - { - "name": "minecraft:light_blue_stained_glass_pane", - "id": -645 - }, - { - "name": "minecraft:light_blue_terracotta", - "id": -726 - }, - { - "name": "minecraft:light_blue_wool", - "id": -562 - }, - { - "name": "minecraft:light_gray_candle", - "id": -421 - }, - { - "name": "minecraft:light_gray_candle_cake", - "id": -438 - }, - { - "name": "minecraft:light_gray_carpet", - "id": -604 - }, - { - "name": "minecraft:light_gray_concrete", - "id": -635 - }, - { - "name": "minecraft:light_gray_concrete_powder", - "id": -716 - }, - { - "name": "minecraft:light_gray_dye", - "id": 404 - }, - { - "name": "minecraft:light_gray_shulker_box", - "id": -620 - }, - { - "name": "minecraft:light_gray_stained_glass", - "id": -680 - }, - { - "name": "minecraft:light_gray_stained_glass_pane", - "id": -650 - }, - { - "name": "minecraft:light_gray_terracotta", - "id": -731 - }, - { - "name": "minecraft:light_gray_wool", - "id": -552 - }, - { - "name": "minecraft:light_weighted_pressure_plate", - "id": 147 - }, - { - "name": "minecraft:lightning_rod", - "id": -312 - }, - { - "name": "minecraft:lime_candle", - "id": -418 - }, - { - "name": "minecraft:lime_candle_cake", - "id": -435 - }, - { - "name": "minecraft:lime_carpet", - "id": -601 - }, - { - "name": "minecraft:lime_concrete", - "id": -632 - }, - { - "name": "minecraft:lime_concrete_powder", - "id": -713 - }, - { - "name": "minecraft:lime_dye", - "id": 407 - }, - { - "name": "minecraft:lime_glazed_terracotta", - "id": 225 - }, - { - "name": "minecraft:lime_shulker_box", - "id": -617 - }, - { - "name": "minecraft:lime_stained_glass", - "id": -677 - }, - { - "name": "minecraft:lime_stained_glass_pane", - "id": -647 - }, - { - "name": "minecraft:lime_terracotta", - "id": -728 - }, - { - "name": "minecraft:lime_wool", - "id": -559 - }, - { - "name": "minecraft:lingering_potion", - "id": 569 - }, - { - "name": "minecraft:lit_blast_furnace", - "id": -214 - }, - { - "name": "minecraft:lit_deepslate_redstone_ore", - "id": -404 - }, - { - "name": "minecraft:lit_furnace", - "id": 62 - }, - { - "name": "minecraft:lit_pumpkin", - "id": 91 - }, - { - "name": "minecraft:lit_redstone_lamp", - "id": 124 - }, - { - "name": "minecraft:lit_redstone_ore", - "id": 74 - }, - { - "name": "minecraft:lit_smoker", - "id": -199 - }, - { - "name": "minecraft:llama_spawn_egg", - "id": 475 - }, - { - "name": "minecraft:lodestone", - "id": -222 - }, - { - "name": "minecraft:lodestone_compass", - "id": 609 - }, - { - "name": "minecraft:log", - "id": 705 - }, - { - "name": "minecraft:log2", - "id": 708 - }, - { - "name": "minecraft:loom", - "id": -204 - }, - { - "name": "minecraft:magenta_candle", - "id": -415 - }, - { - "name": "minecraft:magenta_candle_cake", - "id": -432 - }, - { - "name": "minecraft:magenta_carpet", - "id": -598 - }, - { - "name": "minecraft:magenta_concrete", - "id": -629 - }, - { - "name": "minecraft:magenta_concrete_powder", - "id": -710 - }, - { - "name": "minecraft:magenta_dye", - "id": 410 - }, - { - "name": "minecraft:magenta_glazed_terracotta", - "id": 222 - }, - { - "name": "minecraft:magenta_shulker_box", - "id": -614 - }, - { - "name": "minecraft:magenta_stained_glass", - "id": -674 - }, - { - "name": "minecraft:magenta_stained_glass_pane", - "id": -644 - }, - { - "name": "minecraft:magenta_terracotta", - "id": -725 - }, - { - "name": "minecraft:magenta_wool", - "id": -565 - }, - { - "name": "minecraft:magma", - "id": 213 - }, - { - "name": "minecraft:magma_cream", - "id": 432 - }, - { - "name": "minecraft:magma_cube_spawn_egg", - "id": 457 - }, - { - "name": "minecraft:mangrove_boat", - "id": 642 - }, - { - "name": "minecraft:mangrove_button", - "id": -487 - }, - { - "name": "minecraft:mangrove_chest_boat", - "id": 651 - }, - { - "name": "minecraft:mangrove_door", - "id": 640 - }, - { - "name": "minecraft:mangrove_double_slab", - "id": -499 - }, - { - "name": "minecraft:mangrove_fence", - "id": -491 - }, - { - "name": "minecraft:mangrove_fence_gate", - "id": -492 - }, - { - "name": "minecraft:mangrove_hanging_sign", - "id": -508 - }, - { - "name": "minecraft:mangrove_leaves", - "id": -472 - }, - { - "name": "minecraft:mangrove_log", - "id": -484 - }, - { - "name": "minecraft:mangrove_planks", - "id": -486 - }, - { - "name": "minecraft:mangrove_pressure_plate", - "id": -490 - }, - { - "name": "minecraft:mangrove_propagule", - "id": -474 - }, - { - "name": "minecraft:mangrove_roots", - "id": -482 - }, - { - "name": "minecraft:mangrove_sign", - "id": 641 - }, - { - "name": "minecraft:mangrove_slab", - "id": -489 - }, - { - "name": "minecraft:mangrove_stairs", - "id": -488 - }, - { - "name": "minecraft:mangrove_standing_sign", - "id": -494 - }, - { - "name": "minecraft:mangrove_trapdoor", - "id": -496 - }, - { - "name": "minecraft:mangrove_wall_sign", - "id": -495 - }, - { - "name": "minecraft:mangrove_wood", - "id": -497 - }, - { - "name": "minecraft:medicine", - "id": 606 - }, - { - "name": "minecraft:medium_amethyst_bud", - "id": -331 - }, - { - "name": "minecraft:melon_block", - "id": 103 - }, - { - "name": "minecraft:melon_seeds", - "id": 293 - }, - { - "name": "minecraft:melon_slice", - "id": 272 - }, - { - "name": "minecraft:melon_stem", - "id": 105 - }, - { - "name": "minecraft:milk_bucket", - "id": 363 - }, - { - "name": "minecraft:minecart", - "id": 372 - }, - { - "name": "minecraft:miner_pottery_sherd", - "id": 675 - }, - { - "name": "minecraft:mob_spawner", - "id": 52 - }, - { - "name": "minecraft:mojang_banner_pattern", - "id": 591 - }, - { - "name": "minecraft:monster_egg", - "id": 97 - }, - { - "name": "minecraft:mooshroom_spawn_egg", - "id": 442 - }, - { - "name": "minecraft:moss_block", - "id": -320 - }, - { - "name": "minecraft:moss_carpet", - "id": -335 - }, - { - "name": "minecraft:mossy_cobblestone", - "id": 48 - }, - { - "name": "minecraft:mossy_cobblestone_stairs", - "id": -179 - }, - { - "name": "minecraft:mossy_stone_brick_stairs", - "id": -175 - }, - { - "name": "minecraft:mourner_pottery_sherd", - "id": 676 - }, - { - "name": "minecraft:moving_block", - "id": 250 - }, - { - "name": "minecraft:mud", - "id": -473 - }, - { - "name": "minecraft:mud_brick_double_slab", - "id": -479 - }, - { - "name": "minecraft:mud_brick_slab", - "id": -478 - }, - { - "name": "minecraft:mud_brick_stairs", - "id": -480 - }, - { - "name": "minecraft:mud_brick_wall", - "id": -481 - }, - { - "name": "minecraft:mud_bricks", - "id": -475 - }, - { - "name": "minecraft:muddy_mangrove_roots", - "id": -483 - }, - { - "name": "minecraft:mule_spawn_egg", - "id": 468 - }, - { - "name": "minecraft:mushroom_stew", - "id": 260 - }, - { - "name": "minecraft:music_disc_11", - "id": 551 - }, - { - "name": "minecraft:music_disc_13", - "id": 541 - }, - { - "name": "minecraft:music_disc_5", - "id": 643 - }, - { - "name": "minecraft:music_disc_blocks", - "id": 543 - }, - { - "name": "minecraft:music_disc_cat", - "id": 542 - }, - { - "name": "minecraft:music_disc_chirp", - "id": 544 - }, - { - "name": "minecraft:music_disc_far", - "id": 545 - }, - { - "name": "minecraft:music_disc_mall", - "id": 546 - }, - { - "name": "minecraft:music_disc_mellohi", - "id": 547 - }, - { - "name": "minecraft:music_disc_otherside", - "id": 633 - }, - { - "name": "minecraft:music_disc_pigstep", - "id": 627 - }, - { - "name": "minecraft:music_disc_relic", - "id": 701 - }, - { - "name": "minecraft:music_disc_stal", - "id": 548 - }, - { - "name": "minecraft:music_disc_strad", - "id": 549 - }, - { - "name": "minecraft:music_disc_wait", - "id": 552 - }, - { - "name": "minecraft:music_disc_ward", - "id": 550 - }, - { - "name": "minecraft:mutton", - "id": 557 - }, - { - "name": "minecraft:mycelium", - "id": 110 - }, - { - "name": "minecraft:name_tag", - "id": 555 - }, - { - "name": "minecraft:nautilus_shell", - "id": 577 - }, - { - "name": "minecraft:nether_brick", - "id": 112 - }, - { - "name": "minecraft:nether_brick_fence", - "id": 113 - }, - { - "name": "minecraft:nether_brick_stairs", - "id": 114 - }, - { - "name": "minecraft:nether_gold_ore", - "id": -288 - }, - { - "name": "minecraft:nether_sprouts", - "id": 628 - }, - { - "name": "minecraft:nether_star", - "id": 525 - }, - { - "name": "minecraft:nether_wart", - "id": 294 - }, - { - "name": "minecraft:nether_wart_block", - "id": 214 - }, - { - "name": "minecraft:netherbrick", - "id": 530 - }, - { - "name": "minecraft:netherite_axe", - "id": 613 - }, - { - "name": "minecraft:netherite_block", - "id": -270 - }, - { - "name": "minecraft:netherite_boots", - "id": 619 - }, - { - "name": "minecraft:netherite_chestplate", - "id": 617 - }, - { - "name": "minecraft:netherite_helmet", - "id": 616 - }, - { - "name": "minecraft:netherite_hoe", - "id": 614 - }, - { - "name": "minecraft:netherite_ingot", - "id": 615 - }, - { - "name": "minecraft:netherite_leggings", - "id": 618 - }, - { - "name": "minecraft:netherite_pickaxe", - "id": 612 - }, - { - "name": "minecraft:netherite_scrap", - "id": 620 - }, - { - "name": "minecraft:netherite_shovel", - "id": 611 - }, - { - "name": "minecraft:netherite_sword", - "id": 610 - }, - { - "name": "minecraft:netherite_upgrade_smithing_template", - "id": 684 - }, - { - "name": "minecraft:netherrack", - "id": 87 - }, - { - "name": "minecraft:netherreactor", - "id": 247 - }, - { - "name": "minecraft:normal_stone_stairs", - "id": -180 - }, - { - "name": "minecraft:noteblock", - "id": 25 - }, - { - "name": "minecraft:npc_spawn_egg", - "id": 472 - }, - { - "name": "minecraft:oak_boat", - "id": 377 - }, - { - "name": "minecraft:oak_chest_boat", - "id": 645 - }, - { - "name": "minecraft:oak_fence", - "id": 85 - }, - { - "name": "minecraft:oak_hanging_sign", - "id": -500 - }, - { - "name": "minecraft:oak_log", - "id": 17 - }, - { - "name": "minecraft:oak_sign", - "id": 360 - }, - { - "name": "minecraft:oak_stairs", - "id": 53 - }, - { - "name": "minecraft:observer", - "id": 251 - }, - { - "name": "minecraft:obsidian", - "id": 49 - }, - { - "name": "minecraft:ocelot_spawn_egg", - "id": 453 - }, - { - "name": "minecraft:ochre_froglight", - "id": -471 - }, - { - "name": "minecraft:orange_candle", - "id": -414 - }, - { - "name": "minecraft:orange_candle_cake", - "id": -431 - }, - { - "name": "minecraft:orange_carpet", - "id": -597 - }, - { - "name": "minecraft:orange_concrete", - "id": -628 - }, - { - "name": "minecraft:orange_concrete_powder", - "id": -709 - }, - { - "name": "minecraft:orange_dye", - "id": 411 - }, - { - "name": "minecraft:orange_glazed_terracotta", - "id": 221 - }, - { - "name": "minecraft:orange_shulker_box", - "id": -613 - }, - { - "name": "minecraft:orange_stained_glass", - "id": -673 - }, - { - "name": "minecraft:orange_stained_glass_pane", - "id": -643 - }, - { - "name": "minecraft:orange_terracotta", - "id": -724 - }, - { - "name": "minecraft:orange_wool", - "id": -557 - }, - { - "name": "minecraft:oxidized_copper", - "id": -343 - }, - { - "name": "minecraft:oxidized_cut_copper", - "id": -350 - }, - { - "name": "minecraft:oxidized_cut_copper_slab", - "id": -364 - }, - { - "name": "minecraft:oxidized_cut_copper_stairs", - "id": -357 - }, - { - "name": "minecraft:oxidized_double_cut_copper_slab", - "id": -371 - }, - { - "name": "minecraft:packed_ice", - "id": 174 - }, - { - "name": "minecraft:packed_mud", - "id": -477 - }, - { - "name": "minecraft:painting", - "id": 359 - }, - { - "name": "minecraft:panda_spawn_egg", - "id": 491 - }, - { - "name": "minecraft:paper", - "id": 388 - }, - { - "name": "minecraft:parrot_spawn_egg", - "id": 480 - }, - { - "name": "minecraft:pearlescent_froglight", - "id": -469 - }, - { - "name": "minecraft:phantom_membrane", - "id": 581 - }, - { - "name": "minecraft:phantom_spawn_egg", - "id": 488 - }, - { - "name": "minecraft:pig_spawn_egg", - "id": 439 - }, - { - "name": "minecraft:piglin_banner_pattern", - "id": 594 - }, - { - "name": "minecraft:piglin_brute_spawn_egg", - "id": 501 - }, - { - "name": "minecraft:piglin_spawn_egg", - "id": 499 - }, - { - "name": "minecraft:pillager_spawn_egg", - "id": 493 - }, - { - "name": "minecraft:pink_candle", - "id": -419 - }, - { - "name": "minecraft:pink_candle_cake", - "id": -436 - }, - { - "name": "minecraft:pink_carpet", - "id": -602 - }, - { - "name": "minecraft:pink_concrete", - "id": -633 - }, - { - "name": "minecraft:pink_concrete_powder", - "id": -714 - }, - { - "name": "minecraft:pink_dye", - "id": 406 - }, - { - "name": "minecraft:pink_glazed_terracotta", - "id": 226 - }, - { - "name": "minecraft:pink_petals", - "id": -549 - }, - { - "name": "minecraft:pink_shulker_box", - "id": -618 - }, - { - "name": "minecraft:pink_stained_glass", - "id": -678 - }, - { - "name": "minecraft:pink_stained_glass_pane", - "id": -648 - }, - { - "name": "minecraft:pink_terracotta", - "id": -729 - }, - { - "name": "minecraft:pink_wool", - "id": -566 - }, - { - "name": "minecraft:piston", - "id": 33 - }, - { - "name": "minecraft:piston_arm_collision", - "id": 34 - }, - { - "name": "minecraft:pitcher_crop", - "id": -574 - }, - { - "name": "minecraft:pitcher_plant", - "id": -612 - }, - { - "name": "minecraft:pitcher_pod", - "id": 297 - }, - { - "name": "minecraft:planks", - "id": 5 - }, - { - "name": "minecraft:plenty_pottery_sherd", - "id": 677 - }, - { - "name": "minecraft:podzol", - "id": 243 - }, - { - "name": "minecraft:pointed_dripstone", - "id": -308 - }, - { - "name": "minecraft:poisonous_potato", - "id": 282 - }, - { - "name": "minecraft:polar_bear_spawn_egg", - "id": 474 - }, - { - "name": "minecraft:polished_andesite_stairs", - "id": -174 - }, - { - "name": "minecraft:polished_basalt", - "id": -235 - }, - { - "name": "minecraft:polished_blackstone", - "id": -291 - }, - { - "name": "minecraft:polished_blackstone_brick_double_slab", - "id": -285 - }, - { - "name": "minecraft:polished_blackstone_brick_slab", - "id": -284 - }, - { - "name": "minecraft:polished_blackstone_brick_stairs", - "id": -275 - }, - { - "name": "minecraft:polished_blackstone_brick_wall", - "id": -278 - }, - { - "name": "minecraft:polished_blackstone_bricks", - "id": -274 - }, - { - "name": "minecraft:polished_blackstone_button", - "id": -296 - }, - { - "name": "minecraft:polished_blackstone_double_slab", - "id": -294 - }, - { - "name": "minecraft:polished_blackstone_pressure_plate", - "id": -295 - }, - { - "name": "minecraft:polished_blackstone_slab", - "id": -293 - }, - { - "name": "minecraft:polished_blackstone_stairs", - "id": -292 - }, - { - "name": "minecraft:polished_blackstone_wall", - "id": -297 - }, - { - "name": "minecraft:polished_deepslate", - "id": -383 - }, - { - "name": "minecraft:polished_deepslate_double_slab", - "id": -397 - }, - { - "name": "minecraft:polished_deepslate_slab", - "id": -384 - }, - { - "name": "minecraft:polished_deepslate_stairs", - "id": -385 - }, - { - "name": "minecraft:polished_deepslate_wall", - "id": -386 - }, - { - "name": "minecraft:polished_diorite_stairs", - "id": -173 - }, - { - "name": "minecraft:polished_granite_stairs", - "id": -172 - }, - { - "name": "minecraft:popped_chorus_fruit", - "id": 566 - }, - { - "name": "minecraft:porkchop", - "id": 262 - }, - { - "name": "minecraft:portal", - "id": 90 - }, - { - "name": "minecraft:potato", - "id": 280 - }, - { - "name": "minecraft:potatoes", - "id": 142 - }, - { - "name": "minecraft:potion", - "id": 428 - }, - { - "name": "minecraft:powder_snow", - "id": -306 - }, - { - "name": "minecraft:powder_snow_bucket", - "id": 370 - }, - { - "name": "minecraft:powered_comparator", - "id": 150 - }, - { - "name": "minecraft:powered_repeater", - "id": 94 - }, - { - "name": "minecraft:prismarine", - "id": 168 - }, - { - "name": "minecraft:prismarine_bricks_stairs", - "id": -4 - }, - { - "name": "minecraft:prismarine_crystals", - "id": 556 - }, - { - "name": "minecraft:prismarine_shard", - "id": 572 - }, - { - "name": "minecraft:prismarine_stairs", - "id": -2 - }, - { - "name": "minecraft:prize_pottery_sherd", - "id": 678 - }, - { - "name": "minecraft:pufferfish", - "id": 267 - }, - { - "name": "minecraft:pufferfish_bucket", - "id": 369 - }, - { - "name": "minecraft:pufferfish_spawn_egg", - "id": 483 - }, - { - "name": "minecraft:pumpkin", - "id": 86 - }, - { - "name": "minecraft:pumpkin_pie", - "id": 284 - }, - { - "name": "minecraft:pumpkin_seeds", - "id": 292 - }, - { - "name": "minecraft:pumpkin_stem", - "id": 104 - }, - { - "name": "minecraft:purple_candle", - "id": -423 - }, - { - "name": "minecraft:purple_candle_cake", - "id": -440 - }, - { - "name": "minecraft:purple_carpet", - "id": -606 - }, - { - "name": "minecraft:purple_concrete", - "id": -637 - }, - { - "name": "minecraft:purple_concrete_powder", - "id": -718 - }, - { - "name": "minecraft:purple_dye", - "id": 402 - }, - { - "name": "minecraft:purple_glazed_terracotta", - "id": 219 - }, - { - "name": "minecraft:purple_shulker_box", - "id": -622 - }, - { - "name": "minecraft:purple_stained_glass", - "id": -682 - }, - { - "name": "minecraft:purple_stained_glass_pane", - "id": -652 - }, - { - "name": "minecraft:purple_terracotta", - "id": -733 - }, - { - "name": "minecraft:purple_wool", - "id": -564 - }, - { - "name": "minecraft:purpur_block", - "id": 201 - }, - { - "name": "minecraft:purpur_stairs", - "id": 203 - }, - { - "name": "minecraft:quartz", - "id": 531 - }, - { - "name": "minecraft:quartz_block", - "id": 155 - }, - { - "name": "minecraft:quartz_bricks", - "id": -304 - }, - { - "name": "minecraft:quartz_ore", - "id": 153 - }, - { - "name": "minecraft:quartz_stairs", - "id": 156 - }, - { - "name": "minecraft:rabbit", - "id": 288 - }, - { - "name": "minecraft:rabbit_foot", - "id": 535 - }, - { - "name": "minecraft:rabbit_hide", - "id": 536 - }, - { - "name": "minecraft:rabbit_spawn_egg", - "id": 461 - }, - { - "name": "minecraft:rabbit_stew", - "id": 290 - }, - { - "name": "minecraft:rail", - "id": 66 - }, - { - "name": "minecraft:raiser_armor_trim_smithing_template", - "id": 698 - }, - { - "name": "minecraft:rapid_fertilizer", - "id": 604 - }, - { - "name": "minecraft:ravager_spawn_egg", - "id": 495 - }, - { - "name": "minecraft:raw_copper", - "id": 514 - }, - { - "name": "minecraft:raw_copper_block", - "id": -452 - }, - { - "name": "minecraft:raw_gold", - "id": 513 - }, - { - "name": "minecraft:raw_gold_block", - "id": -453 - }, - { - "name": "minecraft:raw_iron", - "id": 512 - }, - { - "name": "minecraft:raw_iron_block", - "id": -451 - }, - { - "name": "minecraft:recovery_compass", - "id": 653 - }, - { - "name": "minecraft:red_candle", - "id": -427 - }, - { - "name": "minecraft:red_candle_cake", - "id": -444 - }, - { - "name": "minecraft:red_carpet", - "id": -610 - }, - { - "name": "minecraft:red_concrete", - "id": -641 - }, - { - "name": "minecraft:red_concrete_powder", - "id": -722 - }, - { - "name": "minecraft:red_dye", - "id": 398 - }, - { - "name": "minecraft:red_flower", - "id": 38 - }, - { - "name": "minecraft:red_glazed_terracotta", - "id": 234 - }, - { - "name": "minecraft:red_mushroom", - "id": 40 - }, - { - "name": "minecraft:red_mushroom_block", - "id": 100 - }, - { - "name": "minecraft:red_nether_brick", - "id": 215 - }, - { - "name": "minecraft:red_nether_brick_stairs", - "id": -184 - }, - { - "name": "minecraft:red_sandstone", - "id": 179 - }, - { - "name": "minecraft:red_sandstone_stairs", - "id": 180 - }, - { - "name": "minecraft:red_shulker_box", - "id": -626 - }, - { - "name": "minecraft:red_stained_glass", - "id": -686 - }, - { - "name": "minecraft:red_stained_glass_pane", - "id": -656 - }, - { - "name": "minecraft:red_terracotta", - "id": -737 - }, - { - "name": "minecraft:red_wool", - "id": -556 - }, - { - "name": "minecraft:redstone", - "id": 375 - }, - { - "name": "minecraft:redstone_block", - "id": 152 - }, - { - "name": "minecraft:redstone_lamp", - "id": 123 - }, - { - "name": "minecraft:redstone_ore", - "id": 73 - }, - { - "name": "minecraft:redstone_torch", - "id": 76 - }, - { - "name": "minecraft:redstone_wire", - "id": 55 - }, - { - "name": "minecraft:reinforced_deepslate", - "id": -466 - }, - { - "name": "minecraft:repeater", - "id": 421 - }, - { - "name": "minecraft:repeating_command_block", - "id": 188 - }, - { - "name": "minecraft:reserved6", - "id": 255 - }, - { - "name": "minecraft:respawn_anchor", - "id": -272 - }, - { - "name": "minecraft:rib_armor_trim_smithing_template", - "id": 694 - }, - { - "name": "minecraft:rotten_flesh", - "id": 277 - }, - { - "name": "minecraft:saddle", - "id": 373 - }, - { - "name": "minecraft:salmon", - "id": 265 - }, - { - "name": "minecraft:salmon_bucket", - "id": 367 - }, - { - "name": "minecraft:salmon_spawn_egg", - "id": 484 - }, - { - "name": "minecraft:sand", - "id": 12 - }, - { - "name": "minecraft:sandstone", - "id": 24 - }, - { - "name": "minecraft:sandstone_stairs", - "id": 128 - }, - { - "name": "minecraft:sapling", - "id": 6 - }, - { - "name": "minecraft:scaffolding", - "id": -165 - }, - { - "name": "minecraft:sculk", - "id": -458 - }, - { - "name": "minecraft:sculk_catalyst", - "id": -460 - }, - { - "name": "minecraft:sculk_sensor", - "id": -307 - }, - { - "name": "minecraft:sculk_shrieker", - "id": -461 - }, - { - "name": "minecraft:sculk_vein", - "id": -459 - }, - { - "name": "minecraft:scute", - "id": 579 - }, - { - "name": "minecraft:sea_lantern", - "id": 169 - }, - { - "name": "minecraft:sea_pickle", - "id": -156 - }, - { - "name": "minecraft:seagrass", - "id": -130 - }, - { - "name": "minecraft:sentry_armor_trim_smithing_template", - "id": 685 - }, - { - "name": "minecraft:shaper_armor_trim_smithing_template", - "id": 699 - }, - { - "name": "minecraft:sheaf_pottery_sherd", - "id": 679 - }, - { - "name": "minecraft:shears", - "id": 423 - }, - { - "name": "minecraft:sheep_spawn_egg", - "id": 440 - }, - { - "name": "minecraft:shelter_pottery_sherd", - "id": 680 - }, - { - "name": "minecraft:shield", - "id": 357 - }, - { - "name": "minecraft:shroomlight", - "id": -230 - }, - { - "name": "minecraft:shulker_box", - "id": 713 - }, - { - "name": "minecraft:shulker_shell", - "id": 573 - }, - { - "name": "minecraft:shulker_spawn_egg", - "id": 471 - }, - { - "name": "minecraft:silence_armor_trim_smithing_template", - "id": 696 - }, - { - "name": "minecraft:silver_glazed_terracotta", - "id": 228 - }, - { - "name": "minecraft:silverfish_spawn_egg", - "id": 445 - }, - { - "name": "minecraft:skeleton_horse_spawn_egg", - "id": 469 - }, - { - "name": "minecraft:skeleton_spawn_egg", - "id": 446 - }, - { - "name": "minecraft:skull", - "id": 523 - }, - { - "name": "minecraft:skull_banner_pattern", - "id": 590 - }, - { - "name": "minecraft:skull_pottery_sherd", - "id": 681 - }, - { - "name": "minecraft:slime", - "id": 165 - }, - { - "name": "minecraft:slime_ball", - "id": 390 - }, - { - "name": "minecraft:slime_spawn_egg", - "id": 447 - }, - { - "name": "minecraft:small_amethyst_bud", - "id": -332 - }, - { - "name": "minecraft:small_dripleaf_block", - "id": -336 - }, - { - "name": "minecraft:smithing_table", - "id": -202 - }, - { - "name": "minecraft:smoker", - "id": -198 - }, - { - "name": "minecraft:smooth_basalt", - "id": -377 - }, - { - "name": "minecraft:smooth_quartz_stairs", - "id": -185 - }, - { - "name": "minecraft:smooth_red_sandstone_stairs", - "id": -176 - }, - { - "name": "minecraft:smooth_sandstone_stairs", - "id": -177 - }, - { - "name": "minecraft:smooth_stone", - "id": -183 - }, - { - "name": "minecraft:sniffer_egg", - "id": -596 - }, - { - "name": "minecraft:sniffer_spawn_egg", - "id": 502 - }, - { - "name": "minecraft:snort_pottery_sherd", - "id": 682 - }, - { - "name": "minecraft:snout_armor_trim_smithing_template", - "id": 693 - }, - { - "name": "minecraft:snow", - "id": 80 - }, - { - "name": "minecraft:snow_golem_spawn_egg", - "id": 507 - }, - { - "name": "minecraft:snow_layer", - "id": 78 - }, - { - "name": "minecraft:snowball", - "id": 376 - }, - { - "name": "minecraft:soul_campfire", - "id": 629 - }, - { - "name": "minecraft:soul_fire", - "id": -237 - }, - { - "name": "minecraft:soul_lantern", - "id": -269 - }, - { - "name": "minecraft:soul_sand", - "id": 88 - }, - { - "name": "minecraft:soul_soil", - "id": -236 - }, - { - "name": "minecraft:soul_torch", - "id": -268 - }, - { - "name": "minecraft:sparkler", - "id": 607 - }, - { - "name": "minecraft:spawn_egg", - "id": 717 - }, - { - "name": "minecraft:spider_eye", - "id": 278 - }, - { - "name": "minecraft:spider_spawn_egg", - "id": 448 - }, - { - "name": "minecraft:spire_armor_trim_smithing_template", - "id": 695 - }, - { - "name": "minecraft:splash_potion", - "id": 568 - }, - { - "name": "minecraft:sponge", - "id": 19 - }, - { - "name": "minecraft:spore_blossom", - "id": -321 - }, - { - "name": "minecraft:spruce_boat", - "id": 380 - }, - { - "name": "minecraft:spruce_button", - "id": -144 - }, - { - "name": "minecraft:spruce_chest_boat", - "id": 648 - }, - { - "name": "minecraft:spruce_door", - "id": 560 - }, - { - "name": "minecraft:spruce_fence", - "id": -579 - }, - { - "name": "minecraft:spruce_fence_gate", - "id": 183 - }, - { - "name": "minecraft:spruce_hanging_sign", - "id": -501 - }, - { - "name": "minecraft:spruce_log", - "id": -569 - }, - { - "name": "minecraft:spruce_pressure_plate", - "id": -154 - }, - { - "name": "minecraft:spruce_sign", - "id": 583 - }, - { - "name": "minecraft:spruce_stairs", - "id": 134 - }, - { - "name": "minecraft:spruce_standing_sign", - "id": -181 - }, - { - "name": "minecraft:spruce_trapdoor", - "id": -149 - }, - { - "name": "minecraft:spruce_wall_sign", - "id": -182 - }, - { - "name": "minecraft:spyglass", - "id": 632 - }, - { - "name": "minecraft:squid_spawn_egg", - "id": 452 - }, - { - "name": "minecraft:stained_glass", - "id": 711 - }, - { - "name": "minecraft:stained_glass_pane", - "id": 712 - }, - { - "name": "minecraft:stained_hardened_clay", - "id": 702 - }, - { - "name": "minecraft:standing_banner", - "id": 176 - }, - { - "name": "minecraft:standing_sign", - "id": 63 - }, - { - "name": "minecraft:stick", - "id": 322 - }, - { - "name": "minecraft:sticky_piston", - "id": 29 - }, - { - "name": "minecraft:sticky_piston_arm_collision", - "id": -217 - }, - { - "name": "minecraft:stone", - "id": 1 - }, - { - "name": "minecraft:stone_axe", - "id": 317 - }, - { - "name": "minecraft:stone_block_slab", - "id": 44 - }, - { - "name": "minecraft:stone_block_slab2", - "id": 182 - }, - { - "name": "minecraft:stone_block_slab3", - "id": -162 - }, - { - "name": "minecraft:stone_block_slab4", - "id": -166 - }, - { - "name": "minecraft:stone_brick_stairs", - "id": 109 - }, - { - "name": "minecraft:stone_button", - "id": 77 - }, - { - "name": "minecraft:stone_hoe", - "id": 332 - }, - { - "name": "minecraft:stone_pickaxe", - "id": 316 - }, - { - "name": "minecraft:stone_pressure_plate", - "id": 70 - }, - { - "name": "minecraft:stone_shovel", - "id": 315 - }, - { - "name": "minecraft:stone_stairs", - "id": 67 - }, - { - "name": "minecraft:stone_sword", - "id": 314 - }, - { - "name": "minecraft:stonebrick", - "id": 98 - }, - { - "name": "minecraft:stonecutter", - "id": 245 - }, - { - "name": "minecraft:stonecutter_block", - "id": -197 - }, - { - "name": "minecraft:stray_spawn_egg", - "id": 464 - }, - { - "name": "minecraft:strider_spawn_egg", - "id": 497 - }, - { - "name": "minecraft:string", - "id": 328 - }, - { - "name": "minecraft:stripped_acacia_log", - "id": -8 - }, - { - "name": "minecraft:stripped_bamboo_block", - "id": -528 - }, - { - "name": "minecraft:stripped_birch_log", - "id": -6 - }, - { - "name": "minecraft:stripped_cherry_log", - "id": -535 - }, - { - "name": "minecraft:stripped_cherry_wood", - "id": -545 - }, - { - "name": "minecraft:stripped_crimson_hyphae", - "id": -300 - }, - { - "name": "minecraft:stripped_crimson_stem", - "id": -240 - }, - { - "name": "minecraft:stripped_dark_oak_log", - "id": -9 - }, - { - "name": "minecraft:stripped_jungle_log", - "id": -7 - }, - { - "name": "minecraft:stripped_mangrove_log", - "id": -485 - }, - { - "name": "minecraft:stripped_mangrove_wood", - "id": -498 - }, - { - "name": "minecraft:stripped_oak_log", - "id": -10 - }, - { - "name": "minecraft:stripped_spruce_log", - "id": -5 - }, - { - "name": "minecraft:stripped_warped_hyphae", - "id": -301 - }, - { - "name": "minecraft:stripped_warped_stem", - "id": -241 - }, - { - "name": "minecraft:structure_block", - "id": 252 - }, - { - "name": "minecraft:structure_void", - "id": 217 - }, - { - "name": "minecraft:sugar", - "id": 418 - }, - { - "name": "minecraft:sugar_cane", - "id": 387 - }, - { - "name": "minecraft:suspicious_gravel", - "id": -573 - }, - { - "name": "minecraft:suspicious_sand", - "id": -529 - }, - { - "name": "minecraft:suspicious_stew", - "id": 597 - }, - { - "name": "minecraft:sweet_berries", - "id": 287 - }, - { - "name": "minecraft:sweet_berry_bush", - "id": -207 - }, - { - "name": "minecraft:tadpole_bucket", - "id": 637 - }, - { - "name": "minecraft:tadpole_spawn_egg", - "id": 636 - }, - { - "name": "minecraft:tallgrass", - "id": 31 - }, - { - "name": "minecraft:target", - "id": -239 - }, - { - "name": "minecraft:tide_armor_trim_smithing_template", - "id": 692 - }, - { - "name": "minecraft:tinted_glass", - "id": -334 - }, - { - "name": "minecraft:tnt", - "id": 46 - }, - { - "name": "minecraft:tnt_minecart", - "id": 532 - }, - { - "name": "minecraft:torch", - "id": 50 - }, - { - "name": "minecraft:torchflower", - "id": -568 - }, - { - "name": "minecraft:torchflower_crop", - "id": -567 - }, - { - "name": "minecraft:torchflower_seeds", - "id": 296 - }, - { - "name": "minecraft:totem_of_undying", - "id": 575 - }, - { - "name": "minecraft:trader_llama_spawn_egg", - "id": 655 - }, - { - "name": "minecraft:trapdoor", - "id": 96 - }, - { - "name": "minecraft:trapped_chest", - "id": 146 - }, - { - "name": "minecraft:trident", - "id": 553 - }, - { - "name": "minecraft:trip_wire", - "id": 132 - }, - { - "name": "minecraft:tripwire_hook", - "id": 131 - }, - { - "name": "minecraft:tropical_fish", - "id": 266 - }, - { - "name": "minecraft:tropical_fish_bucket", - "id": 368 - }, - { - "name": "minecraft:tropical_fish_spawn_egg", - "id": 481 - }, - { - "name": "minecraft:tube_coral", - "id": -131 - }, - { - "name": "minecraft:tuff", - "id": -333 - }, - { - "name": "minecraft:turtle_egg", - "id": -159 - }, - { - "name": "minecraft:turtle_helmet", - "id": 580 - }, - { - "name": "minecraft:turtle_spawn_egg", - "id": 487 - }, - { - "name": "minecraft:twisting_vines", - "id": -287 - }, - { - "name": "minecraft:underwater_torch", - "id": 239 - }, - { - "name": "minecraft:undyed_shulker_box", - "id": 205 - }, - { - "name": "minecraft:unknown", - "id": -305 - }, - { - "name": "minecraft:unlit_redstone_torch", - "id": 75 - }, - { - "name": "minecraft:unpowered_comparator", - "id": 149 - }, - { - "name": "minecraft:unpowered_repeater", - "id": 93 - }, - { - "name": "minecraft:verdant_froglight", - "id": -470 - }, - { - "name": "minecraft:vex_armor_trim_smithing_template", - "id": 691 - }, - { - "name": "minecraft:vex_spawn_egg", - "id": 478 - }, - { - "name": "minecraft:villager_spawn_egg", - "id": 451 - }, - { - "name": "minecraft:vindicator_spawn_egg", - "id": 476 - }, - { - "name": "minecraft:vine", - "id": 106 - }, - { - "name": "minecraft:wall_banner", - "id": 177 - }, - { - "name": "minecraft:wall_sign", - "id": 68 - }, - { - "name": "minecraft:wandering_trader_spawn_egg", - "id": 494 - }, - { - "name": "minecraft:ward_armor_trim_smithing_template", - "id": 689 - }, - { - "name": "minecraft:warden_spawn_egg", - "id": 639 - }, - { - "name": "minecraft:warped_button", - "id": -261 - }, - { - "name": "minecraft:warped_door", - "id": 624 - }, - { - "name": "minecraft:warped_double_slab", - "id": -267 - }, - { - "name": "minecraft:warped_fence", - "id": -257 - }, - { - "name": "minecraft:warped_fence_gate", - "id": -259 - }, - { - "name": "minecraft:warped_fungus", - "id": -229 - }, - { - "name": "minecraft:warped_fungus_on_a_stick", - "id": 625 - }, - { - "name": "minecraft:warped_hanging_sign", - "id": -507 - }, - { - "name": "minecraft:warped_hyphae", - "id": -298 - }, - { - "name": "minecraft:warped_nylium", - "id": -233 - }, - { - "name": "minecraft:warped_planks", - "id": -243 - }, - { - "name": "minecraft:warped_pressure_plate", - "id": -263 - }, - { - "name": "minecraft:warped_roots", - "id": -224 - }, - { - "name": "minecraft:warped_sign", - "id": 622 - }, - { - "name": "minecraft:warped_slab", - "id": -265 - }, - { - "name": "minecraft:warped_stairs", - "id": -255 - }, - { - "name": "minecraft:warped_standing_sign", - "id": -251 - }, - { - "name": "minecraft:warped_stem", - "id": -226 - }, - { - "name": "minecraft:warped_trapdoor", - "id": -247 - }, - { - "name": "minecraft:warped_wall_sign", - "id": -253 - }, - { - "name": "minecraft:warped_wart_block", - "id": -227 - }, - { - "name": "minecraft:water", - "id": 9 - }, - { - "name": "minecraft:water_bucket", - "id": 364 - }, - { - "name": "minecraft:waterlily", - "id": 111 - }, - { - "name": "minecraft:waxed_copper", - "id": -344 - }, - { - "name": "minecraft:waxed_cut_copper", - "id": -351 - }, - { - "name": "minecraft:waxed_cut_copper_slab", - "id": -365 - }, - { - "name": "minecraft:waxed_cut_copper_stairs", - "id": -358 - }, - { - "name": "minecraft:waxed_double_cut_copper_slab", - "id": -372 - }, - { - "name": "minecraft:waxed_exposed_copper", - "id": -345 - }, - { - "name": "minecraft:waxed_exposed_cut_copper", - "id": -352 - }, - { - "name": "minecraft:waxed_exposed_cut_copper_slab", - "id": -366 - }, - { - "name": "minecraft:waxed_exposed_cut_copper_stairs", - "id": -359 - }, - { - "name": "minecraft:waxed_exposed_double_cut_copper_slab", - "id": -373 - }, - { - "name": "minecraft:waxed_oxidized_copper", - "id": -446 - }, - { - "name": "minecraft:waxed_oxidized_cut_copper", - "id": -447 - }, - { - "name": "minecraft:waxed_oxidized_cut_copper_slab", - "id": -449 - }, - { - "name": "minecraft:waxed_oxidized_cut_copper_stairs", - "id": -448 - }, - { - "name": "minecraft:waxed_oxidized_double_cut_copper_slab", - "id": -450 - }, - { - "name": "minecraft:waxed_weathered_copper", - "id": -346 - }, - { - "name": "minecraft:waxed_weathered_cut_copper", - "id": -353 - }, - { - "name": "minecraft:waxed_weathered_cut_copper_slab", - "id": -367 - }, - { - "name": "minecraft:waxed_weathered_cut_copper_stairs", - "id": -360 - }, - { - "name": "minecraft:waxed_weathered_double_cut_copper_slab", - "id": -374 - }, - { - "name": "minecraft:wayfinder_armor_trim_smithing_template", - "id": 697 - }, - { - "name": "minecraft:weathered_copper", - "id": -342 - }, - { - "name": "minecraft:weathered_cut_copper", - "id": -349 - }, - { - "name": "minecraft:weathered_cut_copper_slab", - "id": -363 - }, - { - "name": "minecraft:weathered_cut_copper_stairs", - "id": -356 - }, - { - "name": "minecraft:weathered_double_cut_copper_slab", - "id": -370 - }, - { - "name": "minecraft:web", - "id": 30 - }, - { - "name": "minecraft:weeping_vines", - "id": -231 - }, - { - "name": "minecraft:wheat", - "id": 336 - }, - { - "name": "minecraft:wheat_seeds", - "id": 291 - }, - { - "name": "minecraft:white_candle", - "id": -413 - }, - { - "name": "minecraft:white_candle_cake", - "id": -430 - }, - { - "name": "minecraft:white_carpet", - "id": 171 - }, - { - "name": "minecraft:white_concrete", - "id": 236 - }, - { - "name": "minecraft:white_concrete_powder", - "id": 237 - }, - { - "name": "minecraft:white_dye", - "id": 412 - }, - { - "name": "minecraft:white_glazed_terracotta", - "id": 220 - }, - { - "name": "minecraft:white_shulker_box", - "id": 218 - }, - { - "name": "minecraft:white_stained_glass", - "id": 241 - }, - { - "name": "minecraft:white_stained_glass_pane", - "id": 160 - }, - { - "name": "minecraft:white_terracotta", - "id": 159 - }, - { - "name": "minecraft:white_wool", - "id": 35 - }, - { - "name": "minecraft:wild_armor_trim_smithing_template", - "id": 688 - }, - { - "name": "minecraft:witch_spawn_egg", - "id": 454 - }, - { - "name": "minecraft:wither_rose", - "id": -216 - }, - { - "name": "minecraft:wither_skeleton_spawn_egg", - "id": 466 - }, - { - "name": "minecraft:wither_spawn_egg", - "id": 509 - }, - { - "name": "minecraft:wolf_spawn_egg", - "id": 441 - }, - { - "name": "minecraft:wood", - "id": -212 - }, - { - "name": "minecraft:wooden_axe", - "id": 313 - }, - { - "name": "minecraft:wooden_button", - "id": 143 - }, - { - "name": "minecraft:wooden_door", - "id": 361 - }, - { - "name": "minecraft:wooden_hoe", - "id": 331 - }, - { - "name": "minecraft:wooden_pickaxe", - "id": 312 - }, - { - "name": "minecraft:wooden_pressure_plate", - "id": 72 - }, - { - "name": "minecraft:wooden_shovel", - "id": 311 - }, - { - "name": "minecraft:wooden_slab", - "id": 158 - }, - { - "name": "minecraft:wooden_sword", - "id": 310 - }, - { - "name": "minecraft:wool", - "id": 703 - }, - { - "name": "minecraft:writable_book", - "id": 517 - }, - { - "name": "minecraft:written_book", - "id": 518 - }, - { - "name": "minecraft:yellow_candle", - "id": -417 - }, - { - "name": "minecraft:yellow_candle_cake", - "id": -434 - }, - { - "name": "minecraft:yellow_carpet", - "id": -600 - }, - { - "name": "minecraft:yellow_concrete", - "id": -631 - }, - { - "name": "minecraft:yellow_concrete_powder", - "id": -712 - }, - { - "name": "minecraft:yellow_dye", - "id": 408 - }, - { - "name": "minecraft:yellow_flower", - "id": 37 - }, - { - "name": "minecraft:yellow_glazed_terracotta", - "id": 224 - }, - { - "name": "minecraft:yellow_shulker_box", - "id": -616 - }, - { - "name": "minecraft:yellow_stained_glass", - "id": -676 - }, - { - "name": "minecraft:yellow_stained_glass_pane", - "id": -646 - }, - { - "name": "minecraft:yellow_terracotta", - "id": -727 - }, - { - "name": "minecraft:yellow_wool", - "id": -558 - }, - { - "name": "minecraft:zoglin_spawn_egg", - "id": 500 - }, - { - "name": "minecraft:zombie_horse_spawn_egg", - "id": 470 - }, - { - "name": "minecraft:zombie_pigman_spawn_egg", - "id": 450 - }, - { - "name": "minecraft:zombie_spawn_egg", - "id": 449 - }, - { - "name": "minecraft:zombie_villager_spawn_egg", - "id": 479 - } -] \ No newline at end of file From f0e983977a35e80ed19f7488ec58dadcb8b9ab04 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Mon, 27 Nov 2023 10:39:52 -0500 Subject: [PATCH 46/86] update mappings --- core/src/main/resources/mappings | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 31ce17e12..ad4b7952e 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 31ce17e12e991bd841270b99f461641093f42564 +Subproject commit ad4b7952e997aaff144e2ce80e9552c8db93b8f1 From c7da8fe16302eb9ebfa6a584dc45b0f0b0ba1955 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Thu, 30 Nov 2023 01:58:35 -0500 Subject: [PATCH 47/86] Better nullability annotations/handling for ItemStacks --- .../org/geysermc/geyser/inventory/GeyserItemStack.java | 7 ++++--- .../geyser/inventory/recipe/GeyserShapedRecipe.java | 3 ++- .../geyser/inventory/recipe/GeyserShapelessRecipe.java | 3 ++- .../geyser/inventory/recipe/GeyserStonecutterData.java | 3 ++- core/src/main/java/org/geysermc/geyser/item/Items.java | 2 ++ .../main/java/org/geysermc/geyser/item/type/Item.java | 3 ++- .../org/geysermc/geyser/registry/type/ItemMappings.java | 2 +- .../geyser/translator/inventory/item/ItemTranslator.java | 5 +++-- .../bedrock/BedrockBlockPickRequestTranslator.java | 2 +- .../java/inventory/JavaContainerSetSlotTranslator.java | 2 +- .../java/inventory/JavaMerchantOffersTranslator.java | 5 +++-- .../java/org/geysermc/geyser/util/InventoryUtils.java | 9 +++++---- gradle/libs.versions.toml | 2 +- 13 files changed, 29 insertions(+), 19 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java index a67516c5c..4ff8db9f0 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/GeyserItemStack.java @@ -34,6 +34,7 @@ import lombok.Getter; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.ItemMapping; @@ -42,7 +43,7 @@ import org.geysermc.geyser.translator.inventory.item.ItemTranslator; @Data public class GeyserItemStack { - public static final GeyserItemStack EMPTY = new GeyserItemStack(0, 0, null); + public static final GeyserItemStack EMPTY = new GeyserItemStack(Items.AIR_ID, 0, null); private final int javaId; private int amount; @@ -64,7 +65,7 @@ public class GeyserItemStack { this.netId = netId; } - public static @NonNull GeyserItemStack from(ItemStack itemStack) { + public static @NonNull GeyserItemStack from(@Nullable ItemStack itemStack) { return itemStack == null ? EMPTY : new GeyserItemStack(itemStack.getId(), itemStack.getAmount(), itemStack.getNbt()); } @@ -122,7 +123,7 @@ public class GeyserItemStack { } public boolean isEmpty() { - return amount <= 0 || javaId == 0; + return amount <= 0 || javaId == Items.AIR_ID; } public GeyserItemStack copy() { diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java index d61945ad8..05c17cf9f 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapedRecipe.java @@ -28,8 +28,9 @@ package org.geysermc.geyser.inventory.recipe; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.mc.protocol.data.game.recipe.Ingredient; import com.github.steveice10.mc.protocol.data.game.recipe.data.ShapedRecipeData; +import org.checkerframework.checker.nullness.qual.Nullable; -public record GeyserShapedRecipe(int width, int height, Ingredient[] ingredients, ItemStack result) implements GeyserRecipe { +public record GeyserShapedRecipe(int width, int height, Ingredient[] ingredients, @Nullable ItemStack result) implements GeyserRecipe { public GeyserShapedRecipe(ShapedRecipeData data) { this(data.getWidth(), data.getHeight(), data.getIngredients(), data.getResult()); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java index 6c7665bbb..e300e3ec8 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserShapelessRecipe.java @@ -28,8 +28,9 @@ package org.geysermc.geyser.inventory.recipe; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.mc.protocol.data.game.recipe.Ingredient; import com.github.steveice10.mc.protocol.data.game.recipe.data.ShapelessRecipeData; +import org.checkerframework.checker.nullness.qual.Nullable; -public record GeyserShapelessRecipe(Ingredient[] ingredients, ItemStack result) implements GeyserRecipe { +public record GeyserShapelessRecipe(Ingredient[] ingredients, @Nullable ItemStack result) implements GeyserRecipe { public GeyserShapelessRecipe(ShapelessRecipeData data) { this(data.getIngredients(), data.getResult()); diff --git a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java index 04a772c31..22163eced 100644 --- a/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java +++ b/core/src/main/java/org/geysermc/geyser/inventory/recipe/GeyserStonecutterData.java @@ -26,10 +26,11 @@ package org.geysermc.geyser.inventory.recipe; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; +import org.checkerframework.checker.nullness.qual.Nullable; /** * @param buttonId the button that needs to be pressed for Java Edition to accept this item. * @param output the expected output of this item when cut. */ -public record GeyserStonecutterData(int buttonId, ItemStack output) { +public record GeyserStonecutterData(int buttonId, @Nullable ItemStack output) { } diff --git a/core/src/main/java/org/geysermc/geyser/item/Items.java b/core/src/main/java/org/geysermc/geyser/item/Items.java index 92c446f68..e84315fd8 100644 --- a/core/src/main/java/org/geysermc/geyser/item/Items.java +++ b/core/src/main/java/org/geysermc/geyser/item/Items.java @@ -1351,6 +1351,8 @@ public final class Items { public static final Item TRIAL_SPAWNER = register(new BlockItem("trial_spawner", builder())); public static final Item TRIAL_KEY = register(new Item("trial_key", builder())); + public static final int AIR_ID = AIR.javaId(); + private static T register(T item) { return register(item, Registries.JAVA_ITEMS.get().size()); } diff --git a/core/src/main/java/org/geysermc/geyser/item/type/Item.java b/core/src/main/java/org/geysermc/geyser/item/type/Item.java index a7a59f6af..94bb3324e 100644 --- a/core/src/main/java/org/geysermc/geyser/item/type/Item.java +++ b/core/src/main/java/org/geysermc/geyser/item/type/Item.java @@ -40,6 +40,7 @@ import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.inventory.item.ItemTranslator; import org.geysermc.geyser.translator.text.MessageTranslator; +import org.geysermc.geyser.util.InventoryUtils; import java.util.ArrayList; import java.util.List; @@ -82,7 +83,7 @@ public class Item { /* Translation methods to Bedrock and back */ public ItemData.Builder translateToBedrock(ItemStack itemStack, ItemMapping mapping, ItemMappings mappings) { - if (itemStack == null) { + if (InventoryUtils.isEmpty(itemStack)) { // Return, essentially, air return ItemData.builder(); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java index 704d5c211..40359b437 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/ItemMappings.java @@ -83,7 +83,7 @@ public class ItemMappings implements DefinitionRegistry { * @return an item entry from the given java edition identifier */ @NonNull - public ItemMapping getMapping(ItemStack itemStack) { + public ItemMapping getMapping(@NonNull ItemStack itemStack) { return this.getMapping(itemStack.getId()); } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java index 856b22c9b..d1a256551 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/item/ItemTranslator.java @@ -67,6 +67,7 @@ import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.MinecraftLocale; import org.geysermc.geyser.translator.text.MessageTranslator; +import org.geysermc.geyser.util.InventoryUtils; import java.text.DecimalFormat; import java.util.*; @@ -89,7 +90,7 @@ public final class ItemTranslator { */ public static ItemStack translateToJava(ItemData data, ItemMappings mappings) { if (data == null) { - return new ItemStack(0); + return new ItemStack(Items.AIR_ID); } ItemMapping bedrockItem = mappings.getMapping(data); @@ -118,7 +119,7 @@ public final class ItemTranslator { @NonNull public static ItemData translateToBedrock(GeyserSession session, ItemStack stack) { - if (stack == null) { + if (InventoryUtils.isEmpty(stack)) { return ItemData.AIR; } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java index dd1a259fd..381adf2b7 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockBlockPickRequestTranslator.java @@ -56,7 +56,7 @@ public class BedrockBlockPickRequestTranslator extends PacketTranslator true") public static boolean isEmpty(@Nullable ItemStack itemStack) { - return itemStack == null || itemStack.getId() == Items.AIR.javaId() || itemStack.getAmount() <= 0; + return itemStack == null || itemStack.getId() == Items.AIR_ID || itemStack.getAmount() <= 0; } /** @@ -233,11 +235,10 @@ public class InventoryUtils { * @param itemStack the item to try to find a match for. NBT will also be accounted for. */ public static void findOrCreateItem(GeyserSession session, ItemStack itemStack) { - PlayerInventory inventory = session.getPlayerInventory(); - - if (itemStack == null || itemStack.getId() == 0) { + if (isEmpty(itemStack)) { return; } + PlayerInventory inventory = session.getPlayerInventory(); // Check hotbar for item for (int i = 36; i < 45; i++) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 22332880a..faacaca2a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ protocol-connection = "3.0.0.Beta1-20231107.190703-112" raknet = "1.0.0.CR1-20230703.195238-9" blockstateupdater="1.20.50-20231106.161340-1" mcauthlib = "d9d773e" -mcprotocollib = "00bce42" +mcprotocollib = "c6ba2fa" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From 701e567818abc20e6ac549653284985337c0f56f Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Thu, 30 Nov 2023 02:51:48 -0500 Subject: [PATCH 48/86] Enable 1.21 experimental features --- .../org/geysermc/geyser/network/UpstreamPacketHandler.java | 3 +++ .../main/java/org/geysermc/geyser/session/GeyserSession.java | 2 ++ 2 files changed, 5 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index 358d8df59..a0b104adb 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -232,6 +232,9 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { stackPacket.getExperiments().add(new ExperimentData("data_driven_items", true)); } + // Required for experimental 1.21 features + stackPacket.getExperiments().add(new ExperimentData("updateAnnouncedLive2023", true)); + session.sendUpstreamPacket(stackPacket); break; diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 265a978ff..28ad5887c 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1544,6 +1544,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { startGamePacket.getExperiments().add(new ExperimentData("upcoming_creator_features", true)); // Needed for certain molang queries used in blocks and items startGamePacket.getExperiments().add(new ExperimentData("experimental_molang_features", true)); + // Required for experimental 1.21 features + startGamePacket.getExperiments().add(new ExperimentData("updateAnnouncedLive2023", true)); startGamePacket.setVanillaVersion("*"); startGamePacket.setInventoriesServerAuthoritative(true); From 9b53f2efd140846ccabba075d9785d60a26c10be Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Thu, 30 Nov 2023 02:53:05 -0500 Subject: [PATCH 49/86] Update 1.20.50 creative items to include experimental items also remove the old unused ones --- .../bedrock/creative_items.1_20_0.json | 6580 ----------------- .../bedrock/creative_items.1_20_10.json | 5793 --------------- .../bedrock/creative_items.1_20_30.json | 5787 --------------- .../bedrock/creative_items.1_20_50.json | 208 + 4 files changed, 208 insertions(+), 18160 deletions(-) delete mode 100644 core/src/main/resources/bedrock/creative_items.1_20_0.json delete mode 100644 core/src/main/resources/bedrock/creative_items.1_20_10.json delete mode 100644 core/src/main/resources/bedrock/creative_items.1_20_30.json diff --git a/core/src/main/resources/bedrock/creative_items.1_20_0.json b/core/src/main/resources/bedrock/creative_items.1_20_0.json deleted file mode 100644 index 0c37c88a0..000000000 --- a/core/src/main/resources/bedrock/creative_items.1_20_0.json +++ /dev/null @@ -1,6580 +0,0 @@ -{ - "items": [ - { - "id": "minecraft:planks", - "blockRuntimeId": 10437 - }, - { - "id": "minecraft:planks", - "blockRuntimeId": 10438 - }, - { - "id": "minecraft:planks", - "blockRuntimeId": 10439 - }, - { - "id": "minecraft:planks", - "blockRuntimeId": 10440 - }, - { - "id": "minecraft:planks", - "blockRuntimeId": 10441 - }, - { - "id": "minecraft:planks", - "blockRuntimeId": 10442 - }, - { - "id": "minecraft:mangrove_planks", - "blockRuntimeId": 2068 - }, - { - "id": "minecraft:cherry_planks", - "blockRuntimeId": 12582 - }, - { - "id": "minecraft:bamboo_planks", - "blockRuntimeId": 8786 - }, - { - "id": "minecraft:bamboo_mosaic", - "blockRuntimeId": 13109 - }, - { - "id": "minecraft:crimson_planks", - "blockRuntimeId": 7977 - }, - { - "id": "minecraft:warped_planks", - "blockRuntimeId": 2039 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2296 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2297 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2298 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2299 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2300 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2301 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2308 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2303 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2304 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2302 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2305 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2309 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2306 - }, - { - "id": "minecraft:cobblestone_wall", - "blockRuntimeId": 2307 - }, - { - "id": "minecraft:blackstone_wall", - "blockRuntimeId": 6189 - }, - { - "id": "minecraft:polished_blackstone_wall", - "blockRuntimeId": 11115 - }, - { - "id": "minecraft:polished_blackstone_brick_wall", - "blockRuntimeId": 2077 - }, - { - "id": "minecraft:cobbled_deepslate_wall", - "blockRuntimeId": 12915 - }, - { - "id": "minecraft:deepslate_tile_wall", - "blockRuntimeId": 8217 - }, - { - "id": "minecraft:polished_deepslate_wall", - "blockRuntimeId": 12647 - }, - { - "id": "minecraft:deepslate_brick_wall", - "blockRuntimeId": 1154 - }, - { - "id": "minecraft:mud_brick_wall", - "blockRuntimeId": 1833 - }, - { - "id": "minecraft:oak_fence", - "blockRuntimeId": 8915 - }, - { - "id": "minecraft:spruce_fence", - "blockRuntimeId": 1116 - }, - { - "id": "minecraft:birch_fence", - "blockRuntimeId": 12910 - }, - { - "id": "minecraft:jungle_fence", - "blockRuntimeId": 1109 - }, - { - "id": "minecraft:acacia_fence", - "blockRuntimeId": 12913 - }, - { - "id": "minecraft:dark_oak_fence", - "blockRuntimeId": 11485 - }, - { - "id": "minecraft:mangrove_fence", - "blockRuntimeId": 11031 - }, - { - "id": "minecraft:cherry_fence", - "blockRuntimeId": 2067 - }, - { - "id": "minecraft:bamboo_fence", - "blockRuntimeId": 1337 - }, - { - "id": "minecraft:nether_brick_fence", - "blockRuntimeId": 6556 - }, - { - "id": "minecraft:crimson_fence", - "blockRuntimeId": 12826 - }, - { - "id": "minecraft:warped_fence", - "blockRuntimeId": 9420 - }, - { - "id": "minecraft:fence_gate", - "blockRuntimeId": 79 - }, - { - "id": "minecraft:spruce_fence_gate", - "blockRuntimeId": 10982 - }, - { - "id": "minecraft:birch_fence_gate", - "blockRuntimeId": 5658 - }, - { - "id": "minecraft:jungle_fence_gate", - "blockRuntimeId": 8528 - }, - { - "id": "minecraft:acacia_fence_gate", - "blockRuntimeId": 12406 - }, - { - "id": "minecraft:dark_oak_fence_gate", - "blockRuntimeId": 6432 - }, - { - "id": "minecraft:mangrove_fence_gate", - "blockRuntimeId": 6943 - }, - { - "id": "minecraft:cherry_fence_gate", - "blockRuntimeId": 13086 - }, - { - "id": "minecraft:bamboo_fence_gate", - "blockRuntimeId": 8192 - }, - { - "id": "minecraft:crimson_fence_gate", - "blockRuntimeId": 7395 - }, - { - "id": "minecraft:warped_fence_gate", - "blockRuntimeId": 8563 - }, - { - "id": "minecraft:normal_stone_stairs", - "blockRuntimeId": 1338 - }, - { - "id": "minecraft:stone_stairs", - "blockRuntimeId": 5584 - }, - { - "id": "minecraft:mossy_cobblestone_stairs", - "blockRuntimeId": 6351 - }, - { - "id": "minecraft:oak_stairs", - "blockRuntimeId": 702 - }, - { - "id": "minecraft:spruce_stairs", - "blockRuntimeId": 132 - }, - { - "id": "minecraft:birch_stairs", - "blockRuntimeId": 11403 - }, - { - "id": "minecraft:jungle_stairs", - "blockRuntimeId": 11364 - }, - { - "id": "minecraft:acacia_stairs", - "blockRuntimeId": 10582 - }, - { - "id": "minecraft:dark_oak_stairs", - "blockRuntimeId": 8209 - }, - { - "id": "minecraft:mangrove_stairs", - "blockRuntimeId": 6901 - }, - { - "id": "minecraft:cherry_stairs", - "blockRuntimeId": 11534 - }, - { - "id": "minecraft:bamboo_stairs", - "blockRuntimeId": 1819 - }, - { - "id": "minecraft:bamboo_mosaic_stairs", - "blockRuntimeId": 10590 - }, - { - "id": "minecraft:stone_brick_stairs", - "blockRuntimeId": 2051 - }, - { - "id": "minecraft:mossy_stone_brick_stairs", - "blockRuntimeId": 9850 - }, - { - "id": "minecraft:sandstone_stairs", - "blockRuntimeId": 5458 - }, - { - "id": "minecraft:smooth_sandstone_stairs", - "blockRuntimeId": 5503 - }, - { - "id": "minecraft:red_sandstone_stairs", - "blockRuntimeId": 8513 - }, - { - "id": "minecraft:smooth_red_sandstone_stairs", - "blockRuntimeId": 8711 - }, - { - "id": "minecraft:granite_stairs", - "blockRuntimeId": 5024 - }, - { - "id": "minecraft:polished_granite_stairs", - "blockRuntimeId": 6409 - }, - { - "id": "minecraft:diorite_stairs", - "blockRuntimeId": 6694 - }, - { - "id": "minecraft:polished_diorite_stairs", - "blockRuntimeId": 11100 - }, - { - "id": "minecraft:andesite_stairs", - "blockRuntimeId": 8470 - }, - { - "id": "minecraft:polished_andesite_stairs", - "blockRuntimeId": 11428 - }, - { - "id": "minecraft:brick_stairs", - "blockRuntimeId": 10928 - }, - { - "id": "minecraft:nether_brick_stairs", - "blockRuntimeId": 109 - }, - { - "id": "minecraft:red_nether_brick_stairs", - "blockRuntimeId": 11000 - }, - { - "id": "minecraft:end_brick_stairs", - "blockRuntimeId": 10776 - }, - { - "id": "minecraft:quartz_stairs", - "blockRuntimeId": 7509 - }, - { - "id": "minecraft:smooth_quartz_stairs", - "blockRuntimeId": 12521 - }, - { - "id": "minecraft:purpur_stairs", - "blockRuntimeId": 12584 - }, - { - "id": "minecraft:prismarine_stairs", - "blockRuntimeId": 12087 - }, - { - "id": "minecraft:dark_prismarine_stairs", - "blockRuntimeId": 12250 - }, - { - "id": "minecraft:prismarine_bricks_stairs", - "blockRuntimeId": 612 - }, - { - "id": "minecraft:crimson_stairs", - "blockRuntimeId": 10674 - }, - { - "id": "minecraft:warped_stairs", - "blockRuntimeId": 5594 - }, - { - "id": "minecraft:blackstone_stairs", - "blockRuntimeId": 11419 - }, - { - "id": "minecraft:polished_blackstone_stairs", - "blockRuntimeId": 6596 - }, - { - "id": "minecraft:polished_blackstone_brick_stairs", - "blockRuntimeId": 6783 - }, - { - "id": "minecraft:cut_copper_stairs", - "blockRuntimeId": 6910 - }, - { - "id": "minecraft:exposed_cut_copper_stairs", - "blockRuntimeId": 6893 - }, - { - "id": "minecraft:weathered_cut_copper_stairs", - "blockRuntimeId": 6604 - }, - { - "id": "minecraft:oxidized_cut_copper_stairs", - "blockRuntimeId": 1073 - }, - { - "id": "minecraft:waxed_cut_copper_stairs", - "blockRuntimeId": 1118 - }, - { - "id": "minecraft:waxed_exposed_cut_copper_stairs", - "blockRuntimeId": 6161 - }, - { - "id": "minecraft:waxed_weathered_cut_copper_stairs", - "blockRuntimeId": 10549 - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_stairs", - "blockRuntimeId": 9395 - }, - { - "id": "minecraft:cobbled_deepslate_stairs", - "blockRuntimeId": 552 - }, - { - "id": "minecraft:deepslate_tile_stairs", - "blockRuntimeId": 7387 - }, - { - "id": "minecraft:polished_deepslate_stairs", - "blockRuntimeId": 1014 - }, - { - "id": "minecraft:deepslate_brick_stairs", - "blockRuntimeId": 12242 - }, - { - "id": "minecraft:mud_brick_stairs", - "blockRuntimeId": 8687 - }, - { - "id": "minecraft:wooden_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:spruce_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:birch_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:jungle_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:acacia_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dark_oak_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mangrove_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cherry_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bamboo_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:crimson_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:warped_door", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:trapdoor", - "blockRuntimeId": 640 - }, - { - "id": "minecraft:spruce_trapdoor", - "blockRuntimeId": 10950 - }, - { - "id": "minecraft:birch_trapdoor", - "blockRuntimeId": 11048 - }, - { - "id": "minecraft:jungle_trapdoor", - "blockRuntimeId": 8544 - }, - { - "id": "minecraft:acacia_trapdoor", - "blockRuntimeId": 8754 - }, - { - "id": "minecraft:dark_oak_trapdoor", - "blockRuntimeId": 12322 - }, - { - "id": "minecraft:mangrove_trapdoor", - "blockRuntimeId": 6791 - }, - { - "id": "minecraft:cherry_trapdoor", - "blockRuntimeId": 2013 - }, - { - "id": "minecraft:bamboo_trapdoor", - "blockRuntimeId": 8409 - }, - { - "id": "minecraft:iron_trapdoor", - "blockRuntimeId": 1041 - }, - { - "id": "minecraft:crimson_trapdoor", - "blockRuntimeId": 6635 - }, - { - "id": "minecraft:warped_trapdoor", - "blockRuntimeId": 7475 - }, - { - "id": "minecraft:iron_bars", - "blockRuntimeId": 7543 - }, - { - "id": "minecraft:glass", - "blockRuntimeId": 10546 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2239 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2247 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2246 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2254 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2251 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2253 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2240 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2243 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2244 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2252 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2248 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2242 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2250 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2249 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2241 - }, - { - "id": "minecraft:stained_glass", - "blockRuntimeId": 2245 - }, - { - "id": "minecraft:tinted_glass", - "blockRuntimeId": 9944 - }, - { - "id": "minecraft:glass_pane", - "blockRuntimeId": 8379 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7979 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7987 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7986 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7994 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7991 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7993 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7980 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7983 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7984 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7992 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7988 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7982 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7990 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7989 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7981 - }, - { - "id": "minecraft:stained_glass_pane", - "blockRuntimeId": 7985 - }, - { - "id": "minecraft:ladder", - "blockRuntimeId": 13114 - }, - { - "id": "minecraft:scaffolding", - "blockRuntimeId": 5442 - }, - { - "id": "minecraft:stone_block_slab", - "blockRuntimeId": 6534 - }, - { - "id": "minecraft:stone_block_slab4", - "blockRuntimeId": 8989 - }, - { - "id": "minecraft:stone_block_slab", - "blockRuntimeId": 6537 - }, - { - "id": "minecraft:stone_block_slab2", - "blockRuntimeId": 8960 - }, - { - "id": "minecraft:wooden_slab", - "blockRuntimeId": 8432 - }, - { - "id": "minecraft:wooden_slab", - "blockRuntimeId": 8433 - }, - { - "id": "minecraft:wooden_slab", - "blockRuntimeId": 8434 - }, - { - "id": "minecraft:wooden_slab", - "blockRuntimeId": 8435 - }, - { - "id": "minecraft:wooden_slab", - "blockRuntimeId": 8436 - }, - { - "id": "minecraft:wooden_slab", - "blockRuntimeId": 8437 - }, - { - "id": "minecraft:mangrove_slab", - "blockRuntimeId": 2255 - }, - { - "id": "minecraft:cherry_slab", - "blockRuntimeId": 10614 - }, - { - "id": "minecraft:bamboo_slab", - "blockRuntimeId": 10926 - }, - { - "id": "minecraft:bamboo_mosaic_slab", - "blockRuntimeId": 4572 - }, - { - "id": "minecraft:stone_block_slab", - "blockRuntimeId": 6539 - }, - { - "id": "minecraft:stone_block_slab4", - "blockRuntimeId": 8987 - }, - { - "id": "minecraft:stone_block_slab", - "blockRuntimeId": 6535 - }, - { - "id": "minecraft:stone_block_slab4", - "blockRuntimeId": 8990 - }, - { - "id": "minecraft:stone_block_slab2", - "blockRuntimeId": 8961 - }, - { - "id": "minecraft:stone_block_slab2", - "blockRuntimeId": 8955 - }, - { - "id": "minecraft:stone_block_slab4", - "blockRuntimeId": 8991 - }, - { - "id": "minecraft:stone_block_slab3", - "blockRuntimeId": 8972 - }, - { - "id": "minecraft:stone_block_slab3", - "blockRuntimeId": 8977 - }, - { - "id": "minecraft:stone_block_slab3", - "blockRuntimeId": 8978 - }, - { - "id": "minecraft:stone_block_slab3", - "blockRuntimeId": 8975 - }, - { - "id": "minecraft:stone_block_slab3", - "blockRuntimeId": 8976 - }, - { - "id": "minecraft:stone_block_slab3", - "blockRuntimeId": 8974 - }, - { - "id": "minecraft:stone_block_slab3", - "blockRuntimeId": 8973 - }, - { - "id": "minecraft:stone_block_slab", - "blockRuntimeId": 6538 - }, - { - "id": "minecraft:stone_block_slab", - "blockRuntimeId": 6541 - }, - { - "id": "minecraft:stone_block_slab2", - "blockRuntimeId": 8962 - }, - { - "id": "minecraft:stone_block_slab3", - "blockRuntimeId": 8971 - }, - { - "id": "minecraft:stone_block_slab", - "blockRuntimeId": 6540 - }, - { - "id": "minecraft:stone_block_slab4", - "blockRuntimeId": 8988 - }, - { - "id": "minecraft:stone_block_slab2", - "blockRuntimeId": 8956 - }, - { - "id": "minecraft:stone_block_slab2", - "blockRuntimeId": 8957 - }, - { - "id": "minecraft:stone_block_slab2", - "blockRuntimeId": 8958 - }, - { - "id": "minecraft:stone_block_slab2", - "blockRuntimeId": 8959 - }, - { - "id": "minecraft:crimson_slab", - "blockRuntimeId": 9867 - }, - { - "id": "minecraft:warped_slab", - "blockRuntimeId": 10890 - }, - { - "id": "minecraft:blackstone_slab", - "blockRuntimeId": 2029 - }, - { - "id": "minecraft:polished_blackstone_slab", - "blockRuntimeId": 10372 - }, - { - "id": "minecraft:polished_blackstone_brick_slab", - "blockRuntimeId": 6453 - }, - { - "id": "minecraft:cut_copper_slab", - "blockRuntimeId": 8381 - }, - { - "id": "minecraft:exposed_cut_copper_slab", - "blockRuntimeId": 10998 - }, - { - "id": "minecraft:weathered_cut_copper_slab", - "blockRuntimeId": 10418 - }, - { - "id": "minecraft:oxidized_cut_copper_slab", - "blockRuntimeId": 8444 - }, - { - "id": "minecraft:waxed_cut_copper_slab", - "blockRuntimeId": 12645 - }, - { - "id": "minecraft:waxed_exposed_cut_copper_slab", - "blockRuntimeId": 660 - }, - { - "id": "minecraft:waxed_weathered_cut_copper_slab", - "blockRuntimeId": 10943 - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_slab", - "blockRuntimeId": 1803 - }, - { - "id": "minecraft:cobbled_deepslate_slab", - "blockRuntimeId": 12135 - }, - { - "id": "minecraft:polished_deepslate_slab", - "blockRuntimeId": 720 - }, - { - "id": "minecraft:deepslate_tile_slab", - "blockRuntimeId": 6557 - }, - { - "id": "minecraft:deepslate_brick_slab", - "blockRuntimeId": 5592 - }, - { - "id": "minecraft:mud_brick_slab", - "blockRuntimeId": 6169 - }, - { - "id": "minecraft:brick_block", - "blockRuntimeId": 7507 - }, - { - "id": "minecraft:chiseled_nether_bricks", - "blockRuntimeId": 12067 - }, - { - "id": "minecraft:cracked_nether_bricks", - "blockRuntimeId": 6858 - }, - { - "id": "minecraft:quartz_bricks", - "blockRuntimeId": 10745 - }, - { - "id": "minecraft:stonebrick", - "blockRuntimeId": 10945 - }, - { - "id": "minecraft:stonebrick", - "blockRuntimeId": 10946 - }, - { - "id": "minecraft:stonebrick", - "blockRuntimeId": 10947 - }, - { - "id": "minecraft:stonebrick", - "blockRuntimeId": 10948 - }, - { - "id": "minecraft:end_bricks", - "blockRuntimeId": 713 - }, - { - "id": "minecraft:prismarine", - "blockRuntimeId": 10469 - }, - { - "id": "minecraft:polished_blackstone_bricks", - "blockRuntimeId": 7414 - }, - { - "id": "minecraft:cracked_polished_blackstone_bricks", - "blockRuntimeId": 12016 - }, - { - "id": "minecraft:gilded_blackstone", - "blockRuntimeId": 6892 - }, - { - "id": "minecraft:chiseled_polished_blackstone", - "blockRuntimeId": 8208 - }, - { - "id": "minecraft:deepslate_tiles", - "blockRuntimeId": 6887 - }, - { - "id": "minecraft:cracked_deepslate_tiles", - "blockRuntimeId": 6419 - }, - { - "id": "minecraft:deepslate_bricks", - "blockRuntimeId": 8628 - }, - { - "id": "minecraft:cracked_deepslate_bricks", - "blockRuntimeId": 8527 - }, - { - "id": "minecraft:chiseled_deepslate", - "blockRuntimeId": 8380 - }, - { - "id": "minecraft:cobblestone", - "blockRuntimeId": 5489 - }, - { - "id": "minecraft:mossy_cobblestone", - "blockRuntimeId": 663 - }, - { - "id": "minecraft:cobbled_deepslate", - "blockRuntimeId": 11068 - }, - { - "id": "minecraft:smooth_stone", - "blockRuntimeId": 6888 - }, - { - "id": "minecraft:sandstone", - "blockRuntimeId": 5529 - }, - { - "id": "minecraft:sandstone", - "blockRuntimeId": 5530 - }, - { - "id": "minecraft:sandstone", - "blockRuntimeId": 5531 - }, - { - "id": "minecraft:sandstone", - "blockRuntimeId": 5532 - }, - { - "id": "minecraft:red_sandstone", - "blockRuntimeId": 10978 - }, - { - "id": "minecraft:red_sandstone", - "blockRuntimeId": 10979 - }, - { - "id": "minecraft:red_sandstone", - "blockRuntimeId": 10980 - }, - { - "id": "minecraft:red_sandstone", - "blockRuntimeId": 10981 - }, - { - "id": "minecraft:coal_block", - "blockRuntimeId": 8561 - }, - { - "id": "minecraft:dried_kelp_block", - "blockRuntimeId": 12809 - }, - { - "id": "minecraft:gold_block", - "blockRuntimeId": 755 - }, - { - "id": "minecraft:iron_block", - "blockRuntimeId": 13113 - }, - { - "id": "minecraft:copper_block", - "blockRuntimeId": 7385 - }, - { - "id": "minecraft:exposed_copper", - "blockRuntimeId": 1318 - }, - { - "id": "minecraft:weathered_copper", - "blockRuntimeId": 13079 - }, - { - "id": "minecraft:oxidized_copper", - "blockRuntimeId": 5424 - }, - { - "id": "minecraft:waxed_copper", - "blockRuntimeId": 12561 - }, - { - "id": "minecraft:waxed_exposed_copper", - "blockRuntimeId": 1789 - }, - { - "id": "minecraft:waxed_weathered_copper", - "blockRuntimeId": 1802 - }, - { - "id": "minecraft:waxed_oxidized_copper", - "blockRuntimeId": 12362 - }, - { - "id": "minecraft:cut_copper", - "blockRuntimeId": 7423 - }, - { - "id": "minecraft:exposed_cut_copper", - "blockRuntimeId": 10548 - }, - { - "id": "minecraft:weathered_cut_copper", - "blockRuntimeId": 11999 - }, - { - "id": "minecraft:oxidized_cut_copper", - "blockRuntimeId": 8642 - }, - { - "id": "minecraft:waxed_cut_copper", - "blockRuntimeId": 12118 - }, - { - "id": "minecraft:waxed_exposed_cut_copper", - "blockRuntimeId": 5690 - }, - { - "id": "minecraft:waxed_weathered_cut_copper", - "blockRuntimeId": 7978 - }, - { - "id": "minecraft:waxed_oxidized_cut_copper", - "blockRuntimeId": 620 - }, - { - "id": "minecraft:emerald_block", - "blockRuntimeId": 2265 - }, - { - "id": "minecraft:diamond_block", - "blockRuntimeId": 701 - }, - { - "id": "minecraft:lapis_block", - "blockRuntimeId": 6550 - }, - { - "id": "minecraft:raw_iron_block", - "blockRuntimeId": 13110 - }, - { - "id": "minecraft:raw_copper_block", - "blockRuntimeId": 8431 - }, - { - "id": "minecraft:raw_gold_block", - "blockRuntimeId": 1083 - }, - { - "id": "minecraft:quartz_block", - "blockRuntimeId": 5572 - }, - { - "id": "minecraft:quartz_block", - "blockRuntimeId": 5574 - }, - { - "id": "minecraft:quartz_block", - "blockRuntimeId": 5573 - }, - { - "id": "minecraft:quartz_block", - "blockRuntimeId": 5575 - }, - { - "id": "minecraft:prismarine", - "blockRuntimeId": 10467 - }, - { - "id": "minecraft:prismarine", - "blockRuntimeId": 10468 - }, - { - "id": "minecraft:slime", - "blockRuntimeId": 6494 - }, - { - "id": "minecraft:honey_block", - "blockRuntimeId": 1995 - }, - { - "id": "minecraft:honeycomb_block", - "blockRuntimeId": 6782 - }, - { - "id": "minecraft:hay_block", - "blockRuntimeId": 1790 - }, - { - "id": "minecraft:bone_block", - "blockRuntimeId": 6495 - }, - { - "id": "minecraft:nether_brick", - "blockRuntimeId": 12097 - }, - { - "id": "minecraft:red_nether_brick", - "blockRuntimeId": 551 - }, - { - "id": "minecraft:netherite_block", - "blockRuntimeId": 5655 - }, - { - "id": "minecraft:lodestone", - "blockRuntimeId": 13108 - }, - { - "id": "minecraft:white_wool", - "blockRuntimeId": 8562 - }, - { - "id": "minecraft:light_gray_wool", - "blockRuntimeId": 12885 - }, - { - "id": "minecraft:gray_wool", - "blockRuntimeId": 632 - }, - { - "id": "minecraft:black_wool", - "blockRuntimeId": 1084 - }, - { - "id": "minecraft:brown_wool", - "blockRuntimeId": 684 - }, - { - "id": "minecraft:red_wool", - "blockRuntimeId": 119 - }, - { - "id": "minecraft:orange_wool", - "blockRuntimeId": 1771 - }, - { - "id": "minecraft:yellow_wool", - "blockRuntimeId": 542 - }, - { - "id": "minecraft:lime_wool", - "blockRuntimeId": 10361 - }, - { - "id": "minecraft:green_wool", - "blockRuntimeId": 5603 - }, - { - "id": "minecraft:cyan_wool", - "blockRuntimeId": 8506 - }, - { - "id": "minecraft:light_blue_wool", - "blockRuntimeId": 11483 - }, - { - "id": "minecraft:blue_wool", - "blockRuntimeId": 8643 - }, - { - "id": "minecraft:purple_wool", - "blockRuntimeId": 13112 - }, - { - "id": "minecraft:magenta_wool", - "blockRuntimeId": 2070 - }, - { - "id": "minecraft:pink_wool", - "blockRuntimeId": 5656 - }, - { - "id": "minecraft:white_carpet", - "blockRuntimeId": 12095 - }, - { - "id": "minecraft:light_gray_carpet", - "blockRuntimeId": 13111 - }, - { - "id": "minecraft:gray_carpet", - "blockRuntimeId": 633 - }, - { - "id": "minecraft:black_carpet", - "blockRuntimeId": 10399 - }, - { - "id": "minecraft:brown_carpet", - "blockRuntimeId": 2046 - }, - { - "id": "minecraft:red_carpet", - "blockRuntimeId": 12240 - }, - { - "id": "minecraft:orange_carpet", - "blockRuntimeId": 11474 - }, - { - "id": "minecraft:yellow_carpet", - "blockRuntimeId": 9881 - }, - { - "id": "minecraft:lime_carpet", - "blockRuntimeId": 11109 - }, - { - "id": "minecraft:green_carpet", - "blockRuntimeId": 5604 - }, - { - "id": "minecraft:cyan_carpet", - "blockRuntimeId": 5491 - }, - { - "id": "minecraft:light_blue_carpet", - "blockRuntimeId": 7544 - }, - { - "id": "minecraft:blue_carpet", - "blockRuntimeId": 584 - }, - { - "id": "minecraft:purple_carpet", - "blockRuntimeId": 12578 - }, - { - "id": "minecraft:magenta_carpet", - "blockRuntimeId": 667 - }, - { - "id": "minecraft:pink_carpet", - "blockRuntimeId": 12520 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10657 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10665 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10664 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10672 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10669 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10671 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10658 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10661 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10662 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10670 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10666 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10660 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10668 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10667 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10659 - }, - { - "id": "minecraft:concrete_powder", - "blockRuntimeId": 10663 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1750 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1758 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1757 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1765 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1762 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1764 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1751 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1754 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1755 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1763 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1759 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1753 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1761 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1760 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1752 - }, - { - "id": "minecraft:concrete", - "blockRuntimeId": 1756 - }, - { - "id": "minecraft:clay", - "blockRuntimeId": 11533 - }, - { - "id": "minecraft:hardened_clay", - "blockRuntimeId": 1346 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10558 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10566 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10565 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10573 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10570 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10572 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10559 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10562 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10563 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10571 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10567 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10561 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10569 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10568 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10560 - }, - { - "id": "minecraft:stained_hardened_clay", - "blockRuntimeId": 10564 - }, - { - "id": "minecraft:white_glazed_terracotta", - "blockRuntimeId": 8738 - }, - { - "id": "minecraft:silver_glazed_terracotta", - "blockRuntimeId": 5018 - }, - { - "id": "minecraft:gray_glazed_terracotta", - "blockRuntimeId": 13102 - }, - { - "id": "minecraft:black_glazed_terracotta", - "blockRuntimeId": 9389 - }, - { - "id": "minecraft:brown_glazed_terracotta", - "blockRuntimeId": 5418 - }, - { - "id": "minecraft:red_glazed_terracotta", - "blockRuntimeId": 6426 - }, - { - "id": "minecraft:orange_glazed_terracotta", - "blockRuntimeId": 2257 - }, - { - "id": "minecraft:yellow_glazed_terracotta", - "blockRuntimeId": 2032 - }, - { - "id": "minecraft:lime_glazed_terracotta", - "blockRuntimeId": 634 - }, - { - "id": "minecraft:green_glazed_terracotta", - "blockRuntimeId": 11008 - }, - { - "id": "minecraft:cyan_glazed_terracotta", - "blockRuntimeId": 8521 - }, - { - "id": "minecraft:light_blue_glazed_terracotta", - "blockRuntimeId": 8635 - }, - { - "id": "minecraft:blue_glazed_terracotta", - "blockRuntimeId": 8629 - }, - { - "id": "minecraft:purple_glazed_terracotta", - "blockRuntimeId": 11411 - }, - { - "id": "minecraft:magenta_glazed_terracotta", - "blockRuntimeId": 2071 - }, - { - "id": "minecraft:pink_glazed_terracotta", - "blockRuntimeId": 10937 - }, - { - "id": "minecraft:purpur_block", - "blockRuntimeId": 12535 - }, - { - "id": "minecraft:purpur_block", - "blockRuntimeId": 12537 - }, - { - "id": "minecraft:packed_mud", - "blockRuntimeId": 715 - }, - { - "id": "minecraft:mud_bricks", - "blockRuntimeId": 11280 - }, - { - "id": "minecraft:nether_wart_block", - "blockRuntimeId": 6560 - }, - { - "id": "minecraft:warped_wart_block", - "blockRuntimeId": 9872 - }, - { - "id": "minecraft:shroomlight", - "blockRuntimeId": 8191 - }, - { - "id": "minecraft:crimson_nylium", - "blockRuntimeId": 6450 - }, - { - "id": "minecraft:warped_nylium", - "blockRuntimeId": 10743 - }, - { - "id": "minecraft:netherrack", - "blockRuntimeId": 11437 - }, - { - "id": "minecraft:basalt", - "blockRuntimeId": 6651 - }, - { - "id": "minecraft:polished_basalt", - "blockRuntimeId": 24 - }, - { - "id": "minecraft:smooth_basalt", - "blockRuntimeId": 2263 - }, - { - "id": "minecraft:soul_soil", - "blockRuntimeId": 8997 - }, - { - "id": "minecraft:dirt", - "blockRuntimeId": 8918 - }, - { - "id": "minecraft:dirt", - "blockRuntimeId": 8919 - }, - { - "id": "minecraft:farmland", - "blockRuntimeId": 6171 - }, - { - "id": "minecraft:grass", - "blockRuntimeId": 11372 - }, - { - "id": "minecraft:grass_path", - "blockRuntimeId": 12914 - }, - { - "id": "minecraft:podzol", - "blockRuntimeId": 7384 - }, - { - "id": "minecraft:mycelium", - "blockRuntimeId": 5559 - }, - { - "id": "minecraft:mud", - "blockRuntimeId": 11070 - }, - { - "id": "minecraft:stone", - "blockRuntimeId": 1743 - }, - { - "id": "minecraft:iron_ore", - "blockRuntimeId": 7424 - }, - { - "id": "minecraft:gold_ore", - "blockRuntimeId": 2031 - }, - { - "id": "minecraft:diamond_ore", - "blockRuntimeId": 6663 - }, - { - "id": "minecraft:lapis_ore", - "blockRuntimeId": 12519 - }, - { - "id": "minecraft:redstone_ore", - "blockRuntimeId": 6553 - }, - { - "id": "minecraft:coal_ore", - "blockRuntimeId": 6551 - }, - { - "id": "minecraft:copper_ore", - "blockRuntimeId": 5425 - }, - { - "id": "minecraft:emerald_ore", - "blockRuntimeId": 12172 - }, - { - "id": "minecraft:quartz_ore", - "blockRuntimeId": 6807 - }, - { - "id": "minecraft:nether_gold_ore", - "blockRuntimeId": 27 - }, - { - "id": "minecraft:ancient_debris", - "blockRuntimeId": 10489 - }, - { - "id": "minecraft:deepslate_iron_ore", - "blockRuntimeId": 12098 - }, - { - "id": "minecraft:deepslate_gold_ore", - "blockRuntimeId": 10488 - }, - { - "id": "minecraft:deepslate_diamond_ore", - "blockRuntimeId": 12868 - }, - { - "id": "minecraft:deepslate_lapis_ore", - "blockRuntimeId": 12080 - }, - { - "id": "minecraft:deepslate_redstone_ore", - "blockRuntimeId": 11014 - }, - { - "id": "minecraft:deepslate_emerald_ore", - "blockRuntimeId": 10744 - }, - { - "id": "minecraft:deepslate_coal_ore", - "blockRuntimeId": 11998 - }, - { - "id": "minecraft:deepslate_copper_ore", - "blockRuntimeId": 108 - }, - { - "id": "minecraft:gravel", - "blockRuntimeId": 13139 - }, - { - "id": "minecraft:stone", - "blockRuntimeId": 1744 - }, - { - "id": "minecraft:stone", - "blockRuntimeId": 1746 - }, - { - "id": "minecraft:stone", - "blockRuntimeId": 1748 - }, - { - "id": "minecraft:blackstone", - "blockRuntimeId": 12405 - }, - { - "id": "minecraft:deepslate", - "blockRuntimeId": 664 - }, - { - "id": "minecraft:stone", - "blockRuntimeId": 1745 - }, - { - "id": "minecraft:stone", - "blockRuntimeId": 1747 - }, - { - "id": "minecraft:stone", - "blockRuntimeId": 1749 - }, - { - "id": "minecraft:polished_blackstone", - "blockRuntimeId": 5558 - }, - { - "id": "minecraft:polished_deepslate", - "blockRuntimeId": 12583 - }, - { - "id": "minecraft:sand", - "blockRuntimeId": 6456 - }, - { - "id": "minecraft:sand", - "blockRuntimeId": 6457 - }, - { - "id": "minecraft:cactus", - "blockRuntimeId": 11383 - }, - { - "id": "minecraft:oak_log", - "blockRuntimeId": 710 - }, - { - "id": "minecraft:stripped_oak_log", - "blockRuntimeId": 12363 - }, - { - "id": "minecraft:spruce_log", - "blockRuntimeId": 6531 - }, - { - "id": "minecraft:stripped_spruce_log", - "blockRuntimeId": 10682 - }, - { - "id": "minecraft:birch_log", - "blockRuntimeId": 1766 - }, - { - "id": "minecraft:stripped_birch_log", - "blockRuntimeId": 9941 - }, - { - "id": "minecraft:jungle_log", - "blockRuntimeId": 625 - }, - { - "id": "minecraft:stripped_jungle_log", - "blockRuntimeId": 1731 - }, - { - "id": "minecraft:acacia_log", - "blockRuntimeId": 6632 - }, - { - "id": "minecraft:stripped_acacia_log", - "blockRuntimeId": 9415 - }, - { - "id": "minecraft:dark_oak_log", - "blockRuntimeId": 4574 - }, - { - "id": "minecraft:stripped_dark_oak_log", - "blockRuntimeId": 622 - }, - { - "id": "minecraft:mangrove_log", - "blockRuntimeId": 1070 - }, - { - "id": "minecraft:stripped_mangrove_log", - "blockRuntimeId": 13136 - }, - { - "id": "minecraft:cherry_log", - "blockRuntimeId": 12084 - }, - { - "id": "minecraft:stripped_cherry_log", - "blockRuntimeId": 6735 - }, - { - "id": "minecraft:crimson_stem", - "blockRuntimeId": 9864 - }, - { - "id": "minecraft:stripped_crimson_stem", - "blockRuntimeId": 11345 - }, - { - "id": "minecraft:warped_stem", - "blockRuntimeId": 10892 - }, - { - "id": "minecraft:stripped_warped_stem", - "blockRuntimeId": 12219 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4577 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4583 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4578 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4584 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4579 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4585 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4580 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4586 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4581 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4587 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4582 - }, - { - "id": "minecraft:wood", - "blockRuntimeId": 4588 - }, - { - "id": "minecraft:mangrove_wood", - "blockRuntimeId": 6420 - }, - { - "id": "minecraft:stripped_mangrove_wood", - "blockRuntimeId": 6490 - }, - { - "id": "minecraft:cherry_wood", - "blockRuntimeId": 11524 - }, - { - "id": "minecraft:stripped_cherry_wood", - "blockRuntimeId": 8002 - }, - { - "id": "minecraft:crimson_hyphae", - "blockRuntimeId": 6593 - }, - { - "id": "minecraft:stripped_crimson_hyphae", - "blockRuntimeId": 10895 - }, - { - "id": "minecraft:warped_hyphae", - "blockRuntimeId": 9869 - }, - { - "id": "minecraft:stripped_warped_hyphae", - "blockRuntimeId": 8744 - }, - { - "id": "minecraft:bamboo_block", - "blockRuntimeId": 60 - }, - { - "id": "minecraft:stripped_bamboo_block", - "blockRuntimeId": 5468 - }, - { - "id": "minecraft:leaves", - "blockRuntimeId": 10472 - }, - { - "id": "minecraft:leaves", - "blockRuntimeId": 10473 - }, - { - "id": "minecraft:leaves", - "blockRuntimeId": 10474 - }, - { - "id": "minecraft:leaves", - "blockRuntimeId": 10475 - }, - { - "id": "minecraft:leaves2", - "blockRuntimeId": 6655 - }, - { - "id": "minecraft:leaves2", - "blockRuntimeId": 6656 - }, - { - "id": "minecraft:mangrove_leaves", - "blockRuntimeId": 11064 - }, - { - "id": "minecraft:cherry_leaves", - "blockRuntimeId": 9385 - }, - { - "id": "minecraft:azalea_leaves", - "blockRuntimeId": 12531 - }, - { - "id": "minecraft:azalea_leaves_flowered", - "blockRuntimeId": 10733 - }, - { - "id": "minecraft:sapling", - "blockRuntimeId": 1807 - }, - { - "id": "minecraft:sapling", - "blockRuntimeId": 1808 - }, - { - "id": "minecraft:sapling", - "blockRuntimeId": 1809 - }, - { - "id": "minecraft:sapling", - "blockRuntimeId": 1810 - }, - { - "id": "minecraft:sapling", - "blockRuntimeId": 1811 - }, - { - "id": "minecraft:sapling", - "blockRuntimeId": 1812 - }, - { - "id": "minecraft:mangrove_propagule", - "blockRuntimeId": 11373 - }, - { - "id": "minecraft:cherry_sapling", - "blockRuntimeId": 12082 - }, - { - "id": "minecraft:bee_nest", - "blockRuntimeId": 8921 - }, - { - "id": "minecraft:wheat_seeds", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pumpkin_seeds", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:melon_seeds", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:beetroot_seeds", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:torchflower_seeds", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pitcher_pod", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wheat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:beetroot", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potato", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:poisonous_potato", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:carrot", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_carrot", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:apple", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_apple", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:enchanted_golden_apple", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:melon_block", - "blockRuntimeId": 1117 - }, - { - "id": "minecraft:melon_slice", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:glistering_melon_slice", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:sweet_berries", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:glow_berries", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pumpkin", - "blockRuntimeId": 6883 - }, - { - "id": "minecraft:carved_pumpkin", - "blockRuntimeId": 12197 - }, - { - "id": "minecraft:lit_pumpkin", - "blockRuntimeId": 11071 - }, - { - "id": "minecraft:honeycomb", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:tallgrass", - "blockRuntimeId": 2049 - }, - { - "id": "minecraft:double_plant", - "blockRuntimeId": 8619 - }, - { - "id": "minecraft:tallgrass", - "blockRuntimeId": 2048 - }, - { - "id": "minecraft:double_plant", - "blockRuntimeId": 8618 - }, - { - "id": "minecraft:nether_sprouts", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:fire_coral", - "blockRuntimeId": 1742 - }, - { - "id": "minecraft:brain_coral", - "blockRuntimeId": 1770 - }, - { - "id": "minecraft:bubble_coral", - "blockRuntimeId": 10616 - }, - { - "id": "minecraft:tube_coral", - "blockRuntimeId": 12592 - }, - { - "id": "minecraft:horn_coral", - "blockRuntimeId": 5490 - }, - { - "id": "minecraft:dead_fire_coral", - "blockRuntimeId": 10673 - }, - { - "id": "minecraft:dead_brain_coral", - "blockRuntimeId": 11997 - }, - { - "id": "minecraft:dead_bubble_coral", - "blockRuntimeId": 12081 - }, - { - "id": "minecraft:dead_tube_coral", - "blockRuntimeId": 6559 - }, - { - "id": "minecraft:dead_horn_coral", - "blockRuntimeId": 9882 - }, - { - "id": "minecraft:coral_fan", - "blockRuntimeId": 6922 - }, - { - "id": "minecraft:coral_fan", - "blockRuntimeId": 6920 - }, - { - "id": "minecraft:coral_fan", - "blockRuntimeId": 6921 - }, - { - "id": "minecraft:coral_fan", - "blockRuntimeId": 6919 - }, - { - "id": "minecraft:coral_fan", - "blockRuntimeId": 6923 - }, - { - "id": "minecraft:coral_fan_dead", - "blockRuntimeId": 72 - }, - { - "id": "minecraft:coral_fan_dead", - "blockRuntimeId": 70 - }, - { - "id": "minecraft:coral_fan_dead", - "blockRuntimeId": 71 - }, - { - "id": "minecraft:coral_fan_dead", - "blockRuntimeId": 69 - }, - { - "id": "minecraft:coral_fan_dead", - "blockRuntimeId": 73 - }, - { - "id": "minecraft:crimson_roots", - "blockRuntimeId": 12393 - }, - { - "id": "minecraft:warped_roots", - "blockRuntimeId": 6664 - }, - { - "id": "minecraft:yellow_flower", - "blockRuntimeId": 1022 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5492 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5493 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5494 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5495 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5496 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5497 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5498 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5499 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5500 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5501 - }, - { - "id": "minecraft:red_flower", - "blockRuntimeId": 5502 - }, - { - "id": "minecraft:double_plant", - "blockRuntimeId": 8616 - }, - { - "id": "minecraft:double_plant", - "blockRuntimeId": 8617 - }, - { - "id": "minecraft:double_plant", - "blockRuntimeId": 8620 - }, - { - "id": "minecraft:double_plant", - "blockRuntimeId": 8621 - }, - { - "id": "minecraft:pitcher_plant", - "blockRuntimeId": 5637 - }, - { - "id": "minecraft:pink_petals", - "blockRuntimeId": 6959 - }, - { - "id": "minecraft:wither_rose", - "blockRuntimeId": 10547 - }, - { - "id": "minecraft:torchflower", - "blockRuntimeId": 10436 - }, - { - "id": "minecraft:white_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:light_gray_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:gray_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:black_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:brown_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:red_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:orange_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:yellow_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lime_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:green_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cyan_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:light_blue_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:blue_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:purple_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:magenta_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pink_dye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:ink_sac", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:glow_ink_sac", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cocoa_beans", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lapis_lazuli", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bone_meal", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:vine", - "blockRuntimeId": 1997 - }, - { - "id": "minecraft:weeping_vines", - "blockRuntimeId": 8644 - }, - { - "id": "minecraft:twisting_vines", - "blockRuntimeId": 8857 - }, - { - "id": "minecraft:waterlily", - "blockRuntimeId": 2264 - }, - { - "id": "minecraft:seagrass", - "blockRuntimeId": 657 - }, - { - "id": "minecraft:kelp", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:deadbush", - "blockRuntimeId": 7411 - }, - { - "id": "minecraft:bamboo", - "blockRuntimeId": 5560 - }, - { - "id": "minecraft:snow", - "blockRuntimeId": 6455 - }, - { - "id": "minecraft:ice", - "blockRuntimeId": 11075 - }, - { - "id": "minecraft:packed_ice", - "blockRuntimeId": 714 - }, - { - "id": "minecraft:blue_ice", - "blockRuntimeId": 11427 - }, - { - "id": "minecraft:snow_layer", - "blockRuntimeId": 560 - }, - { - "id": "minecraft:pointed_dripstone", - "blockRuntimeId": 12235 - }, - { - "id": "minecraft:dripstone_block", - "blockRuntimeId": 1996 - }, - { - "id": "minecraft:moss_carpet", - "blockRuntimeId": 718 - }, - { - "id": "minecraft:moss_block", - "blockRuntimeId": 10936 - }, - { - "id": "minecraft:dirt_with_roots", - "blockRuntimeId": 8560 - }, - { - "id": "minecraft:hanging_roots", - "blockRuntimeId": 611 - }, - { - "id": "minecraft:mangrove_roots", - "blockRuntimeId": 10557 - }, - { - "id": "minecraft:muddy_mangrove_roots", - "blockRuntimeId": 1065 - }, - { - "id": "minecraft:big_dripleaf", - "blockRuntimeId": 9949 - }, - { - "id": "minecraft:small_dripleaf_block", - "blockRuntimeId": 6619 - }, - { - "id": "minecraft:spore_blossom", - "blockRuntimeId": 12137 - }, - { - "id": "minecraft:azalea", - "blockRuntimeId": 11279 - }, - { - "id": "minecraft:flowering_azalea", - "blockRuntimeId": 8641 - }, - { - "id": "minecraft:glow_lichen", - "blockRuntimeId": 8850 - }, - { - "id": "minecraft:amethyst_block", - "blockRuntimeId": 754 - }, - { - "id": "minecraft:budding_amethyst", - "blockRuntimeId": 11399 - }, - { - "id": "minecraft:amethyst_cluster", - "blockRuntimeId": 12640 - }, - { - "id": "minecraft:large_amethyst_bud", - "blockRuntimeId": 7462 - }, - { - "id": "minecraft:medium_amethyst_bud", - "blockRuntimeId": 6678 - }, - { - "id": "minecraft:small_amethyst_bud", - "blockRuntimeId": 1024 - }, - { - "id": "minecraft:tuff", - "blockRuntimeId": 1069 - }, - { - "id": "minecraft:calcite", - "blockRuntimeId": 621 - }, - { - "id": "minecraft:chicken", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:porkchop", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:beef", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mutton", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:rabbit", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cod", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:salmon", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:tropical_fish", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pufferfish", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:brown_mushroom", - "blockRuntimeId": 5417 - }, - { - "id": "minecraft:red_mushroom", - "blockRuntimeId": 6891 - }, - { - "id": "minecraft:crimson_fungus", - "blockRuntimeId": 12581 - }, - { - "id": "minecraft:warped_fungus", - "blockRuntimeId": 719 - }, - { - "id": "minecraft:brown_mushroom_block", - "blockRuntimeId": 12187 - }, - { - "id": "minecraft:red_mushroom_block", - "blockRuntimeId": 5485 - }, - { - "id": "minecraft:brown_mushroom_block", - "blockRuntimeId": 12188 - }, - { - "id": "minecraft:brown_mushroom_block", - "blockRuntimeId": 12173 - }, - { - "id": "minecraft:egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:sugar_cane", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:sugar", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:rotten_flesh", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bone", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:web", - "blockRuntimeId": 11099 - }, - { - "id": "minecraft:spider_eye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mob_spawner", - "blockRuntimeId": 1126 - }, - { - "id": "minecraft:monster_egg", - "blockRuntimeId": 6403 - }, - { - "id": "minecraft:monster_egg", - "blockRuntimeId": 6404 - }, - { - "id": "minecraft:monster_egg", - "blockRuntimeId": 6405 - }, - { - "id": "minecraft:monster_egg", - "blockRuntimeId": 6406 - }, - { - "id": "minecraft:monster_egg", - "blockRuntimeId": 6407 - }, - { - "id": "minecraft:monster_egg", - "blockRuntimeId": 6408 - }, - { - "id": "minecraft:infested_deepslate", - "blockRuntimeId": 7375 - }, - { - "id": "minecraft:dragon_egg", - "blockRuntimeId": 12096 - }, - { - "id": "minecraft:turtle_egg", - "blockRuntimeId": 12827 - }, - { - "id": "minecraft:sniffer_egg", - "blockRuntimeId": 11400 - }, - { - "id": "minecraft:frog_spawn", - "blockRuntimeId": 6702 - }, - { - "id": "minecraft:pearlescent_froglight", - "blockRuntimeId": 10829 - }, - { - "id": "minecraft:verdant_froglight", - "blockRuntimeId": 10887 - }, - { - "id": "minecraft:ochre_froglight", - "blockRuntimeId": 4997 - }, - { - "id": "minecraft:chicken_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bee_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cow_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pig_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:sheep_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wolf_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:polar_bear_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:ocelot_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cat_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mooshroom_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bat_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:parrot_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:rabbit_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:llama_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:horse_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:donkey_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mule_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skeleton_horse_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:zombie_horse_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:tropical_fish_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cod_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pufferfish_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:salmon_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dolphin_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:turtle_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:panda_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:fox_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:creeper_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:enderman_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:silverfish_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skeleton_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wither_skeleton_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:stray_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:slime_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:spider_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:zombie_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:zombie_pigman_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:husk_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:drowned_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:squid_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:glow_squid_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cave_spider_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:witch_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:guardian_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:elder_guardian_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:endermite_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:magma_cube_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:strider_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:hoglin_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:piglin_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:zoglin_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:piglin_brute_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:goat_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:axolotl_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:warden_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:allay_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:frog_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:tadpole_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:trader_llama_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:camel_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:ghast_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:blaze_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:shulker_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:vindicator_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:evoker_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:vex_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:villager_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wandering_trader_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:zombie_villager_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:phantom_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pillager_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:ravager_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_golem_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:snow_golem_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:sniffer_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:obsidian", - "blockRuntimeId": 1153 - }, - { - "id": "minecraft:crying_obsidian", - "blockRuntimeId": 11108 - }, - { - "id": "minecraft:bedrock", - "blockRuntimeId": 11417 - }, - { - "id": "minecraft:soul_sand", - "blockRuntimeId": 8998 - }, - { - "id": "minecraft:magma", - "blockRuntimeId": 12839 - }, - { - "id": "minecraft:nether_wart", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:end_stone", - "blockRuntimeId": 6095 - }, - { - "id": "minecraft:chorus_flower", - "blockRuntimeId": 6836 - }, - { - "id": "minecraft:chorus_plant", - "blockRuntimeId": 8670 - }, - { - "id": "minecraft:chorus_fruit", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:popped_chorus_fruit", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:sponge", - "blockRuntimeId": 1333 - }, - { - "id": "minecraft:sponge", - "blockRuntimeId": 1334 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8383 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8384 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8385 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8386 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8387 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8388 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8389 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8390 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8391 - }, - { - "id": "minecraft:coral_block", - "blockRuntimeId": 8392 - }, - { - "id": "minecraft:sculk", - "blockRuntimeId": 11436 - }, - { - "id": "minecraft:sculk_vein", - "blockRuntimeId": 11933 - }, - { - "id": "minecraft:sculk_catalyst", - "blockRuntimeId": 5487 - }, - { - "id": "minecraft:sculk_shrieker", - "blockRuntimeId": 628 - }, - { - "id": "minecraft:sculk_sensor", - "blockRuntimeId": 6691 - }, - { - "id": "minecraft:calibrated_sculk_sensor", - "blockRuntimeId": 9403 - }, - { - "id": "minecraft:reinforced_deepslate", - "blockRuntimeId": 9383 - }, - { - "id": "minecraft:leather_helmet", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:chainmail_helmet", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_helmet", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_helmet", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_helmet", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_helmet", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:leather_chestplate", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:chainmail_chestplate", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_chestplate", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_chestplate", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_chestplate", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_chestplate", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:leather_leggings", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:chainmail_leggings", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_leggings", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_leggings", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_leggings", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_leggings", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:leather_boots", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:chainmail_boots", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_boots", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_boots", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_boots", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_boots", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wooden_sword", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:stone_sword", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_sword", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_sword", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_sword", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_sword", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wooden_axe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:stone_axe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_axe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_axe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_axe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_axe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wooden_pickaxe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:stone_pickaxe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_pickaxe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_pickaxe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_pickaxe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_pickaxe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wooden_shovel", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:stone_shovel", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_shovel", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_shovel", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_shovel", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_shovel", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wooden_hoe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:stone_hoe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_hoe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_hoe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_hoe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_hoe", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bow", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:crossbow", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 6, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 7, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 8, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 9, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 10, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 11, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 12, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 13, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 14, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 15, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 16, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 17, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 18, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 19, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 20, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 21, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 22, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 23, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 24, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 25, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 26, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 27, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 28, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 29, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 30, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 31, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 32, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 33, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 34, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 35, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 36, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 37, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 38, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 39, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 40, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 41, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 42, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arrow", - "damage": 43, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:shield", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cooked_chicken", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cooked_porkchop", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cooked_beef", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cooked_mutton", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cooked_rabbit", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cooked_cod", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cooked_salmon", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bread", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mushroom_stew", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:beetroot_soup", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:rabbit_stew", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:baked_potato", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cookie", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pumpkin_pie", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cake", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dried_kelp", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:fishing_rod", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:carrot_on_a_stick", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:warped_fungus_on_a_stick", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:snowball", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:shears", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:flint_and_steel", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lead", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:clock", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:compass", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:recovery_compass", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:goat_horn", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:goat_horn", - "damage": 1, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:goat_horn", - "damage": 2, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:goat_horn", - "damage": 3, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:goat_horn", - "damage": 4, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:goat_horn", - "damage": 5, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:goat_horn", - "damage": 6, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:goat_horn", - "damage": 7, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:empty_map", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:empty_map", - "damage": 2, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:saddle", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:leather_horse_armor", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_horse_armor", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:golden_horse_armor", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond_horse_armor", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:trident", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:turtle_helmet", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:elytra", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:totem_of_undying", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:glass_bottle", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:experience_bottle", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 1, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 2, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 3, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 4, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 5, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 6, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 7, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 8, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 9, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 10, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 11, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 12, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 13, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 14, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 15, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 16, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 17, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 18, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 19, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 20, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 21, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 22, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 23, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 24, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 25, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 26, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 27, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 28, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 29, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 30, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 31, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 32, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 33, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 34, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 35, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 36, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 37, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 38, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 39, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 40, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 41, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:potion", - "damage": 42, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 1, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 2, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 3, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 4, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 5, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 6, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 7, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 8, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 9, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 10, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 11, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 12, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 13, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 14, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 15, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 16, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 17, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 18, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 19, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 20, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 21, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 22, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 23, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 24, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 25, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 26, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 27, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 28, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 29, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 30, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 31, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 32, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 33, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 34, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 35, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 36, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 37, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 38, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 39, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 40, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 41, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:splash_potion", - "damage": 42, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 1, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 2, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 3, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 4, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 5, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 6, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 7, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 8, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 9, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 10, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 11, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 12, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 13, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 14, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 15, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 16, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 17, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 18, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 19, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 20, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 21, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 22, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 23, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 24, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 25, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 26, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 27, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 28, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 29, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 30, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 31, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 32, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 33, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 34, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 35, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 36, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 37, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 38, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 39, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 40, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 41, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lingering_potion", - "damage": 42, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:spyglass", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:brush", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:stick", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 8, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 7, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 15, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 12, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 14, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 1, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 4, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 5, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 13, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 9, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 3, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 11, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 10, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 2, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bed", - "damage": 6, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:torch", - "blockRuntimeId": 1827 - }, - { - "id": "minecraft:soul_torch", - "blockRuntimeId": 7378 - }, - { - "id": "minecraft:sea_pickle", - "blockRuntimeId": 9422 - }, - { - "id": "minecraft:lantern", - "blockRuntimeId": 11475 - }, - { - "id": "minecraft:soul_lantern", - "blockRuntimeId": 8916 - }, - { - "id": "minecraft:candle", - "blockRuntimeId": 12222 - }, - { - "id": "minecraft:white_candle", - "blockRuntimeId": 8462 - }, - { - "id": "minecraft:orange_candle", - "blockRuntimeId": 1085 - }, - { - "id": "minecraft:magenta_candle", - "blockRuntimeId": 1143 - }, - { - "id": "minecraft:light_blue_candle", - "blockRuntimeId": 6875 - }, - { - "id": "minecraft:yellow_candle", - "blockRuntimeId": 10574 - }, - { - "id": "minecraft:lime_candle", - "blockRuntimeId": 10762 - }, - { - "id": "minecraft:pink_candle", - "blockRuntimeId": 12189 - }, - { - "id": "minecraft:gray_candle", - "blockRuntimeId": 2059 - }, - { - "id": "minecraft:light_gray_candle", - "blockRuntimeId": 10617 - }, - { - "id": "minecraft:cyan_candle", - "blockRuntimeId": 12553 - }, - { - "id": "minecraft:purple_candle", - "blockRuntimeId": 11438 - }, - { - "id": "minecraft:blue_candle", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:brown_candle", - "blockRuntimeId": 9842 - }, - { - "id": "minecraft:green_candle", - "blockRuntimeId": 1781 - }, - { - "id": "minecraft:red_candle", - "blockRuntimeId": 7415 - }, - { - "id": "minecraft:black_candle", - "blockRuntimeId": 576 - }, - { - "id": "minecraft:crafting_table", - "blockRuntimeId": 9421 - }, - { - "id": "minecraft:cartography_table", - "blockRuntimeId": 13140 - }, - { - "id": "minecraft:fletching_table", - "blockRuntimeId": 9384 - }, - { - "id": "minecraft:smithing_table", - "blockRuntimeId": 5602 - }, - { - "id": "minecraft:beehive", - "blockRuntimeId": 10490 - }, - { - "id": "minecraft:suspicious_sand", - "blockRuntimeId": 2267 - }, - { - "id": "minecraft:suspicious_gravel", - "blockRuntimeId": 7468 - }, - { - "id": "minecraft:campfire", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:soul_campfire", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:furnace", - "blockRuntimeId": 12632 - }, - { - "id": "minecraft:blast_furnace", - "blockRuntimeId": 12387 - }, - { - "id": "minecraft:smoker", - "blockRuntimeId": 1736 - }, - { - "id": "minecraft:respawn_anchor", - "blockRuntimeId": 1776 - }, - { - "id": "minecraft:brewing_stand", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:anvil", - "blockRuntimeId": 11032 - }, - { - "id": "minecraft:anvil", - "blockRuntimeId": 11036 - }, - { - "id": "minecraft:anvil", - "blockRuntimeId": 11040 - }, - { - "id": "minecraft:grindstone", - "blockRuntimeId": 12869 - }, - { - "id": "minecraft:enchanting_table", - "blockRuntimeId": 11114 - }, - { - "id": "minecraft:bookshelf", - "blockRuntimeId": 11069 - }, - { - "id": "minecraft:chiseled_bookshelf", - "blockRuntimeId": 758 - }, - { - "id": "minecraft:lectern", - "blockRuntimeId": 11337 - }, - { - "id": "minecraft:cauldron", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:composter", - "blockRuntimeId": 8579 - }, - { - "id": "minecraft:chest", - "blockRuntimeId": 11518 - }, - { - "id": "minecraft:trapped_chest", - "blockRuntimeId": 8748 - }, - { - "id": "minecraft:ender_chest", - "blockRuntimeId": 6671 - }, - { - "id": "minecraft:barrel", - "blockRuntimeId": 6824 - }, - { - "id": "minecraft:undyed_shulker_box", - "blockRuntimeId": 5557 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8478 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8486 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8485 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8493 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8490 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8492 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8479 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8482 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8483 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8491 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8487 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8481 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8489 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8488 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8480 - }, - { - "id": "minecraft:shulker_box", - "blockRuntimeId": 8484 - }, - { - "id": "minecraft:armor_stand", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:noteblock", - "blockRuntimeId": 1068 - }, - { - "id": "minecraft:jukebox", - "blockRuntimeId": 8001 - }, - { - "id": "minecraft:music_disc_13", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_cat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_blocks", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_chirp", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_far", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_mall", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_mellohi", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_stal", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_strad", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_ward", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_11", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_wait", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_otherside", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_5", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_pigstep", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:music_disc_relic", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:disc_fragment_5", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:glowstone_dust", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:glowstone", - "blockRuntimeId": 6144 - }, - { - "id": "minecraft:redstone_lamp", - "blockRuntimeId": 662 - }, - { - "id": "minecraft:sea_lantern", - "blockRuntimeId": 12366 - }, - { - "id": "minecraft:oak_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:spruce_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:birch_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:jungle_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:acacia_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dark_oak_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mangrove_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cherry_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bamboo_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:crimson_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:warped_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:oak_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:spruce_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:birch_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:jungle_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:acacia_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dark_oak_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mangrove_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cherry_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bamboo_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:crimson_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:warped_hanging_sign", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:painting", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:frame", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:glow_frame", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:honey_bottle", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:flower_pot", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bowl", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:milk_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:water_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:lava_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cod_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:salmon_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:tropical_fish_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:pufferfish_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:powder_snow_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:axolotl_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:tadpole_bucket", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skull", - "damage": 3, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skull", - "damage": 2, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skull", - "damage": 4, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skull", - "damage": 5, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skull", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skull", - "damage": 1, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skull", - "damage": 6, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:beacon", - "blockRuntimeId": 550 - }, - { - "id": "minecraft:bell", - "blockRuntimeId": 11305 - }, - { - "id": "minecraft:conduit", - "blockRuntimeId": 6493 - }, - { - "id": "minecraft:stonecutter_block", - "blockRuntimeId": 12394 - }, - { - "id": "minecraft:end_portal_frame", - "blockRuntimeId": 10443 - }, - { - "id": "minecraft:coal", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:charcoal", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:diamond", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_nugget", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:raw_iron", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:raw_gold", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:raw_copper", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:copper_ingot", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:iron_ingot", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_scrap", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_ingot", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:gold_nugget", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:gold_ingot", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:emerald", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:quartz", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:clay_ball", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:brick", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherbrick", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:prismarine_shard", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:amethyst_shard", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:prismarine_crystals", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:nautilus_shell", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:heart_of_the_sea", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:scute", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:phantom_membrane", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:string", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:feather", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:flint", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:gunpowder", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:leather", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:rabbit_hide", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:rabbit_foot", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:fire_charge", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:blaze_rod", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:blaze_powder", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:magma_cream", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:fermented_spider_eye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:echo_shard", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dragon_breath", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:shulker_shell", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:ghast_tear", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:slime_ball", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:ender_pearl", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:ender_eye", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:nether_star", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:end_rod", - "blockRuntimeId": 9858 - }, - { - "id": "minecraft:lightning_rod", - "blockRuntimeId": 2290 - }, - { - "id": "minecraft:end_crystal", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:paper", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:book", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:writable_book", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQIAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQQAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQVAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQWAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQaAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQbAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQcAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQgAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQhAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "blockRuntimeId": 0, - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:oak_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:spruce_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:birch_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:jungle_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:acacia_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dark_oak_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mangrove_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cherry_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bamboo_raft", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:oak_chest_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:spruce_chest_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:birch_chest_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:jungle_chest_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:acacia_chest_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dark_oak_chest_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mangrove_chest_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:cherry_chest_boat", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bamboo_chest_raft", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:rail", - "blockRuntimeId": 6179 - }, - { - "id": "minecraft:golden_rail", - "blockRuntimeId": 8494 - }, - { - "id": "minecraft:detector_rail", - "blockRuntimeId": 6391 - }, - { - "id": "minecraft:activator_rail", - "blockRuntimeId": 1029 - }, - { - "id": "minecraft:minecart", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:chest_minecart", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:hopper_minecart", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:tnt_minecart", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:redstone", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:redstone_block", - "blockRuntimeId": 5657 - }, - { - "id": "minecraft:redstone_torch", - "blockRuntimeId": 5012 - }, - { - "id": "minecraft:lever", - "blockRuntimeId": 10910 - }, - { - "id": "minecraft:wooden_button", - "blockRuntimeId": 10785 - }, - { - "id": "minecraft:spruce_button", - "blockRuntimeId": 6620 - }, - { - "id": "minecraft:birch_button", - "blockRuntimeId": 12596 - }, - { - "id": "minecraft:jungle_button", - "blockRuntimeId": 120 - }, - { - "id": "minecraft:acacia_button", - "blockRuntimeId": 12049 - }, - { - "id": "minecraft:dark_oak_button", - "blockRuntimeId": 96 - }, - { - "id": "minecraft:mangrove_button", - "blockRuntimeId": 11462 - }, - { - "id": "minecraft:cherry_button", - "blockRuntimeId": 6929 - }, - { - "id": "minecraft:bamboo_button", - "blockRuntimeId": 10874 - }, - { - "id": "minecraft:stone_button", - "blockRuntimeId": 1321 - }, - { - "id": "minecraft:crimson_button", - "blockRuntimeId": 6738 - }, - { - "id": "minecraft:warped_button", - "blockRuntimeId": 12068 - }, - { - "id": "minecraft:polished_blackstone_button", - "blockRuntimeId": 12620 - }, - { - "id": "minecraft:tripwire_hook", - "blockRuntimeId": 9883 - }, - { - "id": "minecraft:wooden_pressure_plate", - "blockRuntimeId": 12894 - }, - { - "id": "minecraft:spruce_pressure_plate", - "blockRuntimeId": 5639 - }, - { - "id": "minecraft:birch_pressure_plate", - "blockRuntimeId": 5426 - }, - { - "id": "minecraft:jungle_pressure_plate", - "blockRuntimeId": 5511 - }, - { - "id": "minecraft:acacia_pressure_plate", - "blockRuntimeId": 8393 - }, - { - "id": "minecraft:dark_oak_pressure_plate", - "blockRuntimeId": 9925 - }, - { - "id": "minecraft:mangrove_pressure_plate", - "blockRuntimeId": 6128 - }, - { - "id": "minecraft:cherry_pressure_plate", - "blockRuntimeId": 142 - }, - { - "id": "minecraft:bamboo_pressure_plate", - "blockRuntimeId": 10451 - }, - { - "id": "minecraft:crimson_pressure_plate", - "blockRuntimeId": 13120 - }, - { - "id": "minecraft:warped_pressure_plate", - "blockRuntimeId": 685 - }, - { - "id": "minecraft:stone_pressure_plate", - "blockRuntimeId": 6145 - }, - { - "id": "minecraft:light_weighted_pressure_plate", - "blockRuntimeId": 5541 - }, - { - "id": "minecraft:heavy_weighted_pressure_plate", - "blockRuntimeId": 2274 - }, - { - "id": "minecraft:polished_blackstone_pressure_plate", - "blockRuntimeId": 10625 - }, - { - "id": "minecraft:observer", - "blockRuntimeId": 5000 - }, - { - "id": "minecraft:daylight_detector", - "blockRuntimeId": 6458 - }, - { - "id": "minecraft:repeater", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:comparator", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:hopper", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dropper", - "blockRuntimeId": 12204 - }, - { - "id": "minecraft:dispenser", - "blockRuntimeId": 12843 - }, - { - "id": "minecraft:piston", - "blockRuntimeId": 2041 - }, - { - "id": "minecraft:sticky_piston", - "blockRuntimeId": 6666 - }, - { - "id": "minecraft:tnt", - "blockRuntimeId": 11093 - }, - { - "id": "minecraft:name_tag", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:loom", - "blockRuntimeId": 6091 - }, - { - "id": "minecraft:banner", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 8, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 7, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 15, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 12, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 14, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 1, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 4, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 5, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 13, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 9, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 3, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 11, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 10, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 2, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 6, - "blockRuntimeId": 0 - }, - { - "id": "minecraft:banner", - "damage": 15, - "blockRuntimeId": 0, - "nbt_b64": "CgAAAwQAVHlwZQEAAAAA" - }, - { - "id": "minecraft:creeper_banner_pattern", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skull_banner_pattern", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:flower_banner_pattern", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mojang_banner_pattern", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:field_masoned_banner_pattern", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:bordure_indented_banner_pattern", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:piglin_banner_pattern", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:globe_banner_pattern", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:angler_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:archer_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:arms_up_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:blade_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:brewer_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:burn_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:danger_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:explorer_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:friend_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:heart_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:heartbreak_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:howl_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:miner_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:mourner_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:plenty_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:prize_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:sheaf_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:shelter_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:skull_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:snort_pottery_sherd", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:netherite_upgrade_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:sentry_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:vex_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wild_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:coast_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:dune_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wayfinder_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:shaper_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:raiser_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:host_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:ward_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:silence_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:tide_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:snout_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:rib_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:eye_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:spire_armor_trim_smithing_template", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwAAAAAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAABwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAIBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAHBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAPBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAMBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAOBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAABBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAEBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAFBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAANBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAJBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAADBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAALBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAKBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAACBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "blockRuntimeId": 0, - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAGBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_star", - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yIR0d/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 8, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yUk9H/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 7, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yl52d/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 15, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y8PDw/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 12, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y2rM6/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 14, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yHYD5/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 1, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yJi6w/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 4, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqkQ8/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 5, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yuDKJ/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 13, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yvU7H/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 9, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqovz/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 3, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yMlSD/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 11, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yPdj+/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 10, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yH8eA/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 2, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yFnxe/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 6, - "blockRuntimeId": 0, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9ynJwW/wA=" - }, - { - "id": "minecraft:chain", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:target", - "blockRuntimeId": 10784 - }, - { - "id": "minecraft:decorated_pot", - "blockRuntimeId": 11110 - }, - { - "id": "minecraft:lodestone_compass", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:wither_spawn_egg", - "blockRuntimeId": 0 - }, - { - "id": "minecraft:ender_dragon_spawn_egg", - "blockRuntimeId": 0 - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/creative_items.1_20_10.json b/core/src/main/resources/bedrock/creative_items.1_20_10.json deleted file mode 100644 index c531bf28e..000000000 --- a/core/src/main/resources/bedrock/creative_items.1_20_10.json +++ /dev/null @@ -1,5793 +0,0 @@ -{ - "items": [ - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZLUoAAAKBgBzdGF0ZXMICQB3b29kX3R5cGUDAG9hawADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZLYoAAAKBgBzdGF0ZXMICQB3b29kX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZLcoAAAKBgBzdGF0ZXMICQB3b29kX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZLgoAAAKBgBzdGF0ZXMICQB3b29kX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZLkoAAAKBgBzdGF0ZXMICQB3b29kX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZLooAAAKBgBzdGF0ZXMICQB3b29kX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:mangrove_planks", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZAkIAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cherry_planks", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQlMQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:bamboo_planks", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWQ/IgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:bamboo_mosaic", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQ1MwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:crimson_planks", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkJR8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:warped_planks", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWTsBwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTtCAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBjb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTuCAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9jb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTvCAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBncmFuaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTwCAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBkaW9yaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTxCAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCABhbmRlc2l0ZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTyCAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBzYW5kc3RvbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT5CAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDQByZWRfc2FuZHN0b25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT0CAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBzdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT1CAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9zdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTzCAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBQBicmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT2CAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDABuZXRoZXJfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT6CAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEAByZWRfbmV0aGVyX2JyaWNrCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT3CAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBlbmRfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT4CAAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCgBwcmlzbWFyaW5lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:blackstone_wall", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZCQYAAAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:polished_blackstone_wall", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZGErAAAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_wall", - "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZBIIAAAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_wall", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRzMgAACgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:deepslate_tile_wall", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWQVIAAACgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:polished_deepslate_wall", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkZjEAAAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:deepslate_brick_wall", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkhgQAAAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:mud_brick_wall", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkHgcAAAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:oak_fence", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZMAiAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:spruce_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZGAEAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:birch_fence", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkbTIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:jungle_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZFkEAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:acacia_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZHEyAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:dark_oak_fence", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk1iwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:mangrove_fence", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkCysAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cherry_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZAgIAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:bamboo_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZD0FAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:nether_brick_fence", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZJQZAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:crimson_fence", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWQZMgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:warped_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZLkkAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:fence_gate", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWRPAAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:spruce_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lk2ioAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:birch_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQRFgAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:jungle_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkPSEAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:acacia_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkdDAAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:dark_oak_fence_gate", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWQXGQAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:mangrove_fence_gate", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWQbGwAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cherry_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lkHjMAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:bamboo_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lk/B8AAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:crimson_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZN8cAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:warped_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkYCEAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:normal_stone_stairs", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQ+BQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_stairs", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZMcVAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:mossy_cobblestone_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZMYYAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:oak_stairs", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWS/AgAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:spruce_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWSFAAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:birch_stairs", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZIMsAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:jungle_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWRcLAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:acacia_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWRGKQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:dark_oak_stairs", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZA0gAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:mangrove_stairs", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZPEaAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cherry_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWQHLQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:bamboo_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWQQBwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:bamboo_mosaic_stairs", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lkTikAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZPgHAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:mossy_stone_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZGcmAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:sandstone_stairs", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWRIFQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:smooth_sandstone_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lkdhUAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_sandstone_stairs", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLiEAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:smooth_red_sandstone_stairs", - "block_state_b64": "CgAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZPQhAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:granite_stairs", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lklRMAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:polished_granite_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkABkAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:diorite_stairs", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lkIBoAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:polished_diorite_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkUSsAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:andesite_stairs", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZBIhAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:polished_andesite_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJ0sAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:brick_stairs", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZKQqAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:nether_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWRtAAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:red_nether_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lk7CoAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:end_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWQLKgAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:quartz_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRRHQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:smooth_quartz_stairs", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lk6DAAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:purpur_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWQnMQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:prismarine_stairs", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkMC8AAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:dark_prismarine_stairs", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTXLwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:prismarine_bricks_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGUCAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:crimson_stairs", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lkpSkAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:warped_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWTRFQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:blackstone_stairs", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lkkywAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:polished_blackstone_stairs", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkvBkAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkehoAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lk+hoAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:exposed_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWTpGgAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:weathered_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZMQZAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:oxidized_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkNAQAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:waxed_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkYgQAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQIGAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZCUpAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkoCQAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZCkCAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:deepslate_tile_stairs", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZNccAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:polished_deepslate_stairs", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWT4AwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:deepslate_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWTPLwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:mud_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWTcIQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:wooden_door" - }, - { - "id": "minecraft:spruce_door" - }, - { - "id": "minecraft:birch_door" - }, - { - "id": "minecraft:jungle_door" - }, - { - "id": "minecraft:acacia_door" - }, - { - "id": "minecraft:dark_oak_door" - }, - { - "id": "minecraft:mangrove_door" - }, - { - "id": "minecraft:cherry_door" - }, - { - "id": "minecraft:bamboo_door" - }, - { - "id": "minecraft:iron_door" - }, - { - "id": "minecraft:crimson_door" - }, - { - "id": "minecraft:warped_door" - }, - { - "id": "minecraft:trapdoor", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkgQIAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:spruce_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZLoqAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:birch_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkHCsAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:jungle_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZE0hAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:acacia_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZB8iAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:dark_oak_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lkIDAAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:mangrove_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkghoAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cherry_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZNIHAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:bamboo_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZNUgAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:iron_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWQUBAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:crimson_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWTjGQAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:warped_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZC8dAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:iron_bars", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZHMdAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:glass", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lkIikAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS0CAAACgYAc3RhdGVzCAUAY29sb3IFAHdoaXRlAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS8CAAACgYAc3RhdGVzCAUAY29sb3IGAHNpbHZlcgADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS7CAAACgYAc3RhdGVzCAUAY29sb3IEAGdyYXkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWTDCAAACgYAc3RhdGVzCAUAY29sb3IFAGJsYWNrAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWTACAAACgYAc3RhdGVzCAUAY29sb3IFAGJyb3duAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWTCCAAACgYAc3RhdGVzCAUAY29sb3IDAHJlZAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS1CAAACgYAc3RhdGVzCAUAY29sb3IGAG9yYW5nZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS4CAAACgYAc3RhdGVzCAUAY29sb3IGAHllbGxvdwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS5CAAACgYAc3RhdGVzCAUAY29sb3IEAGxpbWUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWTBCAAACgYAc3RhdGVzCAUAY29sb3IFAGdyZWVuAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS9CAAACgYAc3RhdGVzCAUAY29sb3IEAGN5YW4AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS3CAAACgYAc3RhdGVzCAUAY29sb3IKAGxpZ2h0X2JsdWUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS/CAAACgYAc3RhdGVzCAUAY29sb3IEAGJsdWUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS+CAAACgYAc3RhdGVzCAUAY29sb3IGAHB1cnBsZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS2CAAACgYAc3RhdGVzCAUAY29sb3IHAG1hZ2VudGEAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2gZNhYJXm9IMwMKAG5ldHdvcmtfaWS6CAAACgYAc3RhdGVzCAUAY29sb3IEAHBpbmsAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:tinted_glass", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZMcmAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:glass_pane", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWS3IAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZCcfAAAKBgBzdGF0ZXMIBQBjb2xvcgUAd2hpdGUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZC8fAAAKBgBzdGF0ZXMIBQBjb2xvcgYAc2lsdmVyAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZC4fAAAKBgBzdGF0ZXMIBQBjb2xvcgQAZ3JheQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZDYfAAAKBgBzdGF0ZXMIBQBjb2xvcgUAYmxhY2sAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZDMfAAAKBgBzdGF0ZXMIBQBjb2xvcgUAYnJvd24AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZDUfAAAKBgBzdGF0ZXMIBQBjb2xvcgMAcmVkAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZCgfAAAKBgBzdGF0ZXMIBQBjb2xvcgYAb3JhbmdlAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZCsfAAAKBgBzdGF0ZXMIBQBjb2xvcgYAeWVsbG93AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZCwfAAAKBgBzdGF0ZXMIBQBjb2xvcgQAbGltZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZDQfAAAKBgBzdGF0ZXMIBQBjb2xvcgUAZ3JlZW4AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZDAfAAAKBgBzdGF0ZXMIBQBjb2xvcgQAY3lhbgADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZCofAAAKBgBzdGF0ZXMIBQBjb2xvcgoAbGlnaHRfYmx1ZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZDIfAAAKBgBzdGF0ZXMIBQBjb2xvcgQAYmx1ZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZDEfAAAKBgBzdGF0ZXMIBQBjb2xvcgYAcHVycGxlAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZCkfAAAKBgBzdGF0ZXMIBQBjb2xvcgcAbWFnZW50YQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLb5lzurQ119AwoAbmV0d29ya19pZC0fAAAKBgBzdGF0ZXMIBQBjb2xvcgQAcGluawADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:ladder", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZDozAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:scaffolding", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkOBUAAAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWR+GQAACgYAc3RhdGVzCA8Ac3RvbmVfc2xhYl90eXBlDABzbW9vdGhfc3RvbmUBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkCiMAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV80BQBzdG9uZQEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSBGQAACgYAc3RhdGVzCA8Ac3RvbmVfc2xhYl90eXBlCwBjb2JibGVzdG9uZQEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk7SIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8yEQBtb3NzeV9jb2JibGVzdG9uZQEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lk7CAAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAICQB3b29kX3R5cGUDAG9hawADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lk7SAAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAICQB3b29kX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lk7iAAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAICQB3b29kX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lk7yAAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAICQB3b29kX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lk8CAAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAICQB3b29kX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lk8SAAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAICQB3b29kX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:mangrove_slab", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWTECAAACgYAc3RhdGVzAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cherry_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lkZykAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:bamboo_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkoioAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:bamboo_mosaic_slab", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZNERAAAKBgBzdGF0ZXMBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSDGQAACgYAc3RhdGVzCA8Ac3RvbmVfc2xhYl90eXBlCwBzdG9uZV9icmljawEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkCCMAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV80EQBtb3NzeV9zdG9uZV9icmljawEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWR/GQAACgYAc3RhdGVzCA8Ac3RvbmVfc2xhYl90eXBlCQBzYW5kc3RvbmUBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkCyMAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV80DQBjdXRfc2FuZHN0b25lAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk7iIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8yEABzbW9vdGhfc2FuZHN0b25lAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk6CIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8yDQByZWRfc2FuZHN0b25lAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkDCMAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV80EQBjdXRfcmVkX3NhbmRzdG9uZQEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lk+SIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8zFABzbW9vdGhfcmVkX3NhbmRzdG9uZQEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lk/iIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8zBwBncmFuaXRlAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lk/yIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8zEABwb2xpc2hlZF9ncmFuaXRlAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lk/CIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8zBwBkaW9yaXRlAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lk/SIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8zEABwb2xpc2hlZF9kaW9yaXRlAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lk+yIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8zCABhbmRlc2l0ZQEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lk+iIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8zEQBwb2xpc2hlZF9hbmRlc2l0ZQEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSCGQAACgYAc3RhdGVzCA8Ac3RvbmVfc2xhYl90eXBlBQBicmljawEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSFGQAACgYAc3RhdGVzCA8Ac3RvbmVfc2xhYl90eXBlDABuZXRoZXJfYnJpY2sBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk7yIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8yEAByZWRfbmV0aGVyX2JyaWNrAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lk+CIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8zDwBlbmRfc3RvbmVfYnJpY2sBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSEGQAACgYAc3RhdGVzCA8Ac3RvbmVfc2xhYl90eXBlBgBxdWFydHoBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkCSMAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV80DQBzbW9vdGhfcXVhcnR6AQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk6SIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8yBgBwdXJwdXIBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk6iIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8yEABwcmlzbWFyaW5lX3JvdWdoAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk6yIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8yDwBwcmlzbWFyaW5lX2RhcmsBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk7CIAAAoGAHN0YXRlcwgRAHN0b25lX3NsYWJfdHlwZV8yEABwcmlzbWFyaW5lX2JyaWNrAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:crimson_slab", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZHkmAAAKBgBzdGF0ZXMBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:warped_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lkfSoAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:blackstone_slab", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZOIHAAAKBgBzdGF0ZXMBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:polished_blackstone_slab", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZHMoAAAKBgBzdGF0ZXMBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:polished_blackstone_brick_slab", - "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZC0ZAAAKBgBzdGF0ZXMBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZLkgAAAKBgBzdGF0ZXMBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:exposed_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lk6ioAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:weathered_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWSiKAAACgYAc3RhdGVzAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZPggAAAKBgBzdGF0ZXMBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:waxed_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZGQxAAAKBgBzdGF0ZXMBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lklQIAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSzKgAACgYAc3RhdGVzAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZAAHAAAKBgBzdGF0ZXMBDAB0b3Bfc2xvdF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cobbled_deepslate_slab", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWRiLwAACgYAc3RhdGVzAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:polished_deepslate_slab", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lk0gIAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:deepslate_tile_slab", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWSVGQAACgYAc3RhdGVzAQwAdG9wX3Nsb3RfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:deepslate_brick_slab", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkzxUAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:mud_brick_slab", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkEBgAAAoGAHN0YXRlcwEMAHRvcF9zbG90X2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:brick_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkTx0AAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:chiseled_nether_bricks", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWQcLwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cracked_nether_bricks", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZMUaAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:quartz_bricks", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWTsKQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWS1KgAACgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAZGVmYXVsdAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWS2KgAACgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQUAbW9zc3kAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWS3KgAACgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAY3JhY2tlZAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWS4KgAACgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQgAY2hpc2VsZWQAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:end_bricks", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWTKAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWTVKAAACgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBgBicmlja3MAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:polished_blackstone_bricks", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lk8hwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cracked_polished_blackstone_bricks", - "block_state_b64": "CgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWTpLgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:gilded_blackstone", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lk6BoAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:chiseled_polished_blackstone", - "block_state_b64": "CgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWQMIAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:deepslate_tiles", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZOIaAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cracked_deepslate_tiles", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkChkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:deepslate_bricks", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWShIQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cracked_deepslate_bricks", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZDwhAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:chiseled_deepslate", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZLggAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cobblestone", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkZxUAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:mossy_cobblestone", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lkmAIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cobbled_deepslate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkMCsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:smooth_stone", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZOMaAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZJAVAAAKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUHAGRlZmF1bHQAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZJEVAAAKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGULAGhlaXJvZ2x5cGhzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZJIVAAAKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUDAGN1dAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZJMVAAAKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUGAHNtb290aAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTWKgAACgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTXKgAACgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlCwBoZWlyb2dseXBocwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTYKgAACgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlAwBjdXQAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTZKgAACgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBgBzbW9vdGgAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coal_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWReIQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:dried_kelp_block", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQIMgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:gold_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWT1AgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:iron_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWQ5MwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:copper_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZNUcAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:exposed_copper", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lkKgUAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:weathered_copper", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQXMwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:oxidized_copper", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZCYVAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:waxed_copper", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZBAxAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:waxed_exposed_copper", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lk8gYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:waxed_weathered_copper", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWT/BgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:waxed_oxidized_copper", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZEgwAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cut_copper", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWT7HAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:exposed_cut_copper", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZCQpAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:weathered_cut_copper", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk2C4AAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWSvIQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:waxed_cut_copper", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWRRLwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZDEWAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkJh8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWRtAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:emerald_block", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWTOCAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:diamond_block", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWS+AgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:lapis_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lkjhkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:raw_iron_block", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lkNjMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:raw_copper_block", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWTrIAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:raw_gold_block", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkPgQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZLsVAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZL0VAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZLwVAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQgAY2hpc2VsZWQICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZL4VAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQYAc21vb3RoCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWTTKAAACgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWTUKAAACgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBABkYXJrAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:slime", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkVhkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:honey_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lkwAcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:honeycomb_block", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZHkaAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:hay_block", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZPMGAAAKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:bone_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWRXGQAACgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:nether_brick", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZDwvAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:red_nether_brick", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWQoAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:netherite_block", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZA4WAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:lodestone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZDQzAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:white_wool", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWRfIQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:light_gray_wool", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZFQyAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:gray_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZHkCAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:black_wool", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRABAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:brown_wool", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWStAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:red_wool", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lkeAAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:orange_wool", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk3wYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:yellow_wool", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkHwIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:lime_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZGgoAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:green_wool", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWTaFQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cyan_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZCYhAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:light_blue_wool", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZNQsAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:blue_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZLAhAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:purple_wool", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lkODMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:magenta_wool", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZAsIAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:pink_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZA8WAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:white_carpet", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZDgvAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:light_gray_carpet", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkNzMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:gray_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkegIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:black_carpet", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZI8oAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:brown_carpet", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZPMHAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:red_carpet", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWTNLwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:orange_carpet", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWTLLAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:yellow_carpet", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWSIJgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:lime_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkWysAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:green_carpet", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZNsVAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cyan_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkahUAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:light_blue_carpet", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkdB0AAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:blue_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkSQIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:purple_carpet", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWQhMQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:magenta_carpet", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lknAIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:pink_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lk5zAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJQpAAAKBgBzdGF0ZXMIBQBjb2xvcgUAd2hpdGUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJwpAAAKBgBzdGF0ZXMIBQBjb2xvcgYAc2lsdmVyAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJspAAAKBgBzdGF0ZXMIBQBjb2xvcgQAZ3JheQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZKMpAAAKBgBzdGF0ZXMIBQBjb2xvcgUAYmxhY2sAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZKApAAAKBgBzdGF0ZXMIBQBjb2xvcgUAYnJvd24AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZKIpAAAKBgBzdGF0ZXMIBQBjb2xvcgMAcmVkAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJUpAAAKBgBzdGF0ZXMIBQBjb2xvcgYAb3JhbmdlAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJgpAAAKBgBzdGF0ZXMIBQBjb2xvcgYAeWVsbG93AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJkpAAAKBgBzdGF0ZXMIBQBjb2xvcgQAbGltZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZKEpAAAKBgBzdGF0ZXMIBQBjb2xvcgUAZ3JlZW4AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJ0pAAAKBgBzdGF0ZXMIBQBjb2xvcgQAY3lhbgADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJcpAAAKBgBzdGF0ZXMIBQBjb2xvcgoAbGlnaHRfYmx1ZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJ8pAAAKBgBzdGF0ZXMIBQBjb2xvcgQAYmx1ZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJ4pAAAKBgBzdGF0ZXMIBQBjb2xvcgYAcHVycGxlAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJYpAAAKBgBzdGF0ZXMIBQBjb2xvcgcAbWFnZW50YQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:concrete_powder", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaJNKGQOSGsSsAwoAbmV0d29ya19pZJopAAAKBgBzdGF0ZXMIBQBjb2xvcgQAcGluawADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:white_concrete", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lkcDIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:light_gray_concrete", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWTpBgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:gray_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWSYLwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:black_concrete", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lkSSsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:brown_concrete", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkVikAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_concrete", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZOYwAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:orange_concrete", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZFkrAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:yellow_concrete", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZGkVAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:lime_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTkGgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:green_concrete", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkeCYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cyan_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQ5LwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:light_blue_concrete", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWTfLwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:blue_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWQ7LwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:purple_concrete", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCwZAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:magenta_concrete", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWQBGgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:pink_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSdEwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:clay", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWQGLQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:hardened_clay", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRGBQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZC4pAAAKBgBzdGF0ZXMIBQBjb2xvcgUAd2hpdGUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDYpAAAKBgBzdGF0ZXMIBQBjb2xvcgYAc2lsdmVyAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDUpAAAKBgBzdGF0ZXMIBQBjb2xvcgQAZ3JheQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZD0pAAAKBgBzdGF0ZXMIBQBjb2xvcgUAYmxhY2sAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDopAAAKBgBzdGF0ZXMIBQBjb2xvcgUAYnJvd24AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDwpAAAKBgBzdGF0ZXMIBQBjb2xvcgMAcmVkAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZC8pAAAKBgBzdGF0ZXMIBQBjb2xvcgYAb3JhbmdlAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDIpAAAKBgBzdGF0ZXMIBQBjb2xvcgYAeWVsbG93AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDMpAAAKBgBzdGF0ZXMIBQBjb2xvcgQAbGltZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDspAAAKBgBzdGF0ZXMIBQBjb2xvcgUAZ3JlZW4AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDcpAAAKBgBzdGF0ZXMIBQBjb2xvcgQAY3lhbgADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDEpAAAKBgBzdGF0ZXMIBQBjb2xvcgoAbGlnaHRfYmx1ZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDkpAAAKBgBzdGF0ZXMIBQBjb2xvcgQAYmx1ZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDgpAAAKBgBzdGF0ZXMIBQBjb2xvcgYAcHVycGxlAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDApAAAKBgBzdGF0ZXMIBQBjb2xvcgcAbWFnZW50YQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stained_hardened_clay", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0YWluZWRfaGFyZGVuZWRfY2xheQQJAG5hbWVfaGFzaNYbyvfAS3CpAwoAbmV0d29ya19pZDQpAAAKBgBzdGF0ZXMIBQBjb2xvcgQAcGluawADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:white_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkDyIAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:silver_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZI8TAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:gray_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQuMwAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:black_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lkmiQAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:brown_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkIBUAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:red_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZBEZAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:orange_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZMYIAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:yellow_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZOUHAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:lime_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWR7AgAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:green_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lk9CoAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:cyan_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWQ2IQAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:light_blue_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWSoIQAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:blue_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWSiIQAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:purple_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZIssAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:magenta_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQMCAAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:pink_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWStKgAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZPYwAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZPgwAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:packed_mud", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTNAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:mud_bricks", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWQHLAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:nether_wart_block", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkmBkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:warped_wart_block", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkfiYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:shroomlight", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lk+x8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:crimson_nylium", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkKRkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:warped_nylium", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWTqKQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:netherrack", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWSmLAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:basalt", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZPMZAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:polished_basalt", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZBgAAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:smooth_basalt", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTMCAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:soul_soil", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZBIjAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWTDIgAACgYAc3RhdGVzCAkAZGlydF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWTEIgAACgYAc3RhdGVzCAkAZGlydF90eXBlBgBjb2Fyc2UAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:farmland", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkEhgAAAoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:grass", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmdyYXNzBAkAbmFtZV9oYXNosppASPWFlsUDCgBuZXR3b3JrX2lkZCwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:grass_path", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWRyMgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:podzol", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZNQcAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:mycelium", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkrhUAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:mud", - "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZDIrAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk0wYAAAoGAHN0YXRlcwgKAHN0b25lX3R5cGUFAHN0b25lAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:iron_ore", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk/BwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:gold_ore", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lk5AcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:diamond_ore", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/xkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:lapis_ore", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZOUwAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:redstone_ore", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZJEZAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coal_ore", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lkjxkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:copper_ore", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQnFQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:emerald_ore", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lkhy8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:quartz_ore", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSSGgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:nether_gold_ore", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZBsAAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:ancient_debris", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lk6SgAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:deepslate_iron_ore", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZD0vAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:deepslate_gold_ore", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZOgoAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:deepslate_diamond_ore", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZEMyAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:deepslate_lapis_ore", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWQpLwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:deepslate_redstone_ore", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWT6KgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:deepslate_emerald_ore", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZOspAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:deepslate_coal_ore", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZNcuAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:deepslate_copper_ore", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkbAAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:gravel", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZFMzAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk1AYAAAoGAHN0YXRlcwgKAHN0b25lX3R5cGUHAGdyYW5pdGUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk1gYAAAoGAHN0YXRlcwgKAHN0b25lX3R5cGUHAGRpb3JpdGUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk2AYAAAoGAHN0YXRlcwgKAHN0b25lX3R5cGUIAGFuZGVzaXRlAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:blackstone", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWRzMAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:deepslate", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZJkCAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk1QYAAAoGAHN0YXRlcwgKAHN0b25lX3R5cGUOAGdyYW5pdGVfc21vb3RoAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk1wYAAAoGAHN0YXRlcwgKAHN0b25lX3R5cGUOAGRpb3JpdGVfc21vb3RoAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk2QYAAAoGAHN0YXRlcwgKAHN0b25lX3R5cGUPAGFuZGVzaXRlX3Ntb290aAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:polished_blackstone", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWStFQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:polished_deepslate", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCYxAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:sand", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWQwGQAACgYAc3RhdGVzCAkAc2FuZF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:sand", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWQxGQAACgYAc3RhdGVzCAkAc2FuZF90eXBlAwByZWQAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cactus", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZG8sAAAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:oak_log", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWTHAgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stripped_oak_log", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWRJMAAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:spruce_log", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWR7GQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stripped_spruce_log", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWStKQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:birch_log", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZNoGAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stripped_birch_log", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZMQmAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:jungle_log", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWRyAgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stripped_jungle_log", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWTHBgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:acacia_log", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWTgGQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stripped_acacia_log", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWS0JAAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:dark_oak_log", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZNMRAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stripped_dark_oak_log", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZG8CAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:mangrove_log", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZDEEAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stripped_mangrove_log", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZFAzAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cherry_log", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWQtLwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stripped_cherry_log", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRKGgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:crimson_stem", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZHUmAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stripped_crimson_stem", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZEgsAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:warped_stem", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkfyoAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stripped_warped_stem", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkuC8AAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTWEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlAwBvYWsAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTcEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlAwBvYWsAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTXEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBzcHJ1Y2UAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTdEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBzcHJ1Y2UAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTYEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBQBiaXJjaAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTeEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBQBiaXJjaAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTZEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBqdW5nbGUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTfEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBqdW5nbGUAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTaEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBhY2FjaWEAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTgEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBhY2FjaWEAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTbEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlCABkYXJrX29hawADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWThEQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlCABkYXJrX29hawADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:mangrove_wood", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWQLGQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stripped_mangrove_wood", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWRSGQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cherry_wood", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lk/SwAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AQwAc3RyaXBwZWRfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stripped_cherry_wood", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkPh8AAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:crimson_hyphae", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lkuRkAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stripped_crimson_hyphae", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkgyoAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:warped_hyphae", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWR7JgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:stripped_warped_hyphae", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWQVIgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:bamboo_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZDwAAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:stripped_bamboo_block", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZFIVAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:leaves", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZNgoAAAKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlAwBvYWsBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:leaves", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZNkoAAAKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBgBzcHJ1Y2UBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:leaves", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZNooAAAKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBQBiaXJjaAEOAHBlcnNpc3RlbnRfYml0AAEKAHVwZGF0ZV9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:leaves", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZNsoAAAKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBgBqdW5nbGUBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:leaves2", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxlYXZlczIECQBuYW1lX2hhc2gy/bgrncY1ZAMKAG5ldHdvcmtfaWT3GQAACgYAc3RhdGVzCA0AbmV3X2xlYWZfdHlwZQYAYWNhY2lhAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:leaves2", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxlYXZlczIECQBuYW1lX2hhc2gy/bgrncY1ZAMKAG5ldHdvcmtfaWT4GQAACgYAc3RhdGVzCA0AbmV3X2xlYWZfdHlwZQgAZGFya19vYWsBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:mangrove_leaves", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZCwrAAAKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cherry_leaves", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWSWJAAACgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:azalea_leaves", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTyMAAACgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:azalea_leaves_flowered", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWTgKQAACgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQEBwAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUDAG9hawADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQFBwAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQGBwAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQHBwAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQIBwAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQJBwAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:mangrove_propagule", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZGUsAAAKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cherry_sapling", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkKy8AAAoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:bee_nest", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkxiIAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wheat_seeds" - }, - { - "id": "minecraft:pumpkin_seeds" - }, - { - "id": "minecraft:melon_seeds" - }, - { - "id": "minecraft:beetroot_seeds" - }, - { - "id": "minecraft:torchflower_seeds" - }, - { - "id": "minecraft:pitcher_pod" - }, - { - "id": "minecraft:wheat" - }, - { - "id": "minecraft:beetroot" - }, - { - "id": "minecraft:potato" - }, - { - "id": "minecraft:poisonous_potato" - }, - { - "id": "minecraft:carrot" - }, - { - "id": "minecraft:golden_carrot" - }, - { - "id": "minecraft:apple" - }, - { - "id": "minecraft:golden_apple" - }, - { - "id": "minecraft:enchanted_golden_apple" - }, - { - "id": "minecraft:melon_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkYQQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:melon_slice" - }, - { - "id": "minecraft:glistering_melon_slice" - }, - { - "id": "minecraft:sweet_berries" - }, - { - "id": "minecraft:glow_berries" - }, - { - "id": "minecraft:pumpkin", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWTeGgAACgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:carved_pumpkin", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkoi8AAAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:lit_pumpkin", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lkMysAAAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:honeycomb" - }, - { - "id": "minecraft:tallgrass", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZPYHAAAKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAGZlcm4AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZJghAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAZmVybgEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:tallgrass", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZPUHAAAKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAHRhbGwAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZJchAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQUAZ3Jhc3MBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:nether_sprouts" - }, - { - "id": "minecraft:fire_coral", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWTSBgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:brain_coral", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lk3gYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:bubble_coral", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZGkpAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:tube_coral", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWQvMQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:horn_coral", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWRoFQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:dead_fire_coral", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZKQpAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:dead_brain_coral", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWTWLgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:dead_bubble_coral", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lkKi8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:dead_tube_coral", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZJcZAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:dead_horn_coral", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZIkmAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZAYbAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgMAcmVkAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZAQbAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgQAcGluawMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZAUbAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgYAcHVycGxlAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZAMbAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgQAYmx1ZQMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZAcbAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgYAeWVsbG93AxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkSAAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkRgAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkRwAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkRQAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkSQAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:crimson_roots", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRnMAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:warped_roots", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZAAaAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:yellow_flower", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19mbG93ZXIECQBuYW1lX2hhc2jWbU1pF0OUGAMKAG5ldHdvcmtfaWQABAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRrFQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUFAHBvcHB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRsFQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUGAG9yY2hpZAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRtFQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUGAGFsbGl1bQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRuFQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUJAGhvdXN0b25pYQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRvFQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUJAHR1bGlwX3JlZAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRwFQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUMAHR1bGlwX29yYW5nZQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRxFQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGULAHR1bGlwX3doaXRlAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRyFQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUKAHR1bGlwX3BpbmsAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRzFQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUFAG94ZXllAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR0FQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUKAGNvcm5mbG93ZXIAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR1FQAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUSAGxpbHlfb2ZfdGhlX3ZhbGxleQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZJUhAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQkAc3VuZmxvd2VyAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZJYhAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAc3lyaW5nYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZJkhAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAcm9zZQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZJohAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAcGFlb25pYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:pitcher_plant", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWT8FQAACgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:pink_petals", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkKxsAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADBgBncm93dGgAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:wither_rose", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkIykAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:torchflower", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lktCgAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:white_dye" - }, - { - "id": "minecraft:light_gray_dye" - }, - { - "id": "minecraft:gray_dye" - }, - { - "id": "minecraft:black_dye" - }, - { - "id": "minecraft:brown_dye" - }, - { - "id": "minecraft:red_dye" - }, - { - "id": "minecraft:orange_dye" - }, - { - "id": "minecraft:yellow_dye" - }, - { - "id": "minecraft:lime_dye" - }, - { - "id": "minecraft:green_dye" - }, - { - "id": "minecraft:cyan_dye" - }, - { - "id": "minecraft:light_blue_dye" - }, - { - "id": "minecraft:blue_dye" - }, - { - "id": "minecraft:purple_dye" - }, - { - "id": "minecraft:magenta_dye" - }, - { - "id": "minecraft:pink_dye" - }, - { - "id": "minecraft:ink_sac" - }, - { - "id": "minecraft:glow_ink_sac" - }, - { - "id": "minecraft:cocoa_beans" - }, - { - "id": "minecraft:lapis_lazuli" - }, - { - "id": "minecraft:bone_meal" - }, - { - "id": "minecraft:vine", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnZpbmUECQBuYW1lX2hhc2j0Sj8/XeXOLAMKAG5ldHdvcmtfaWTCBwAACgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:weeping_vines", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWSxIQAACgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:twisting_vines", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lkhiIAAAoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:waterlily", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZM0IAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:seagrass", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkkgIAAAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:kelp" - }, - { - "id": "minecraft:deadbush", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lk7xwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:bamboo", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZK8VAAAKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:snow", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQvGQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:ice", - "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZDcrAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:packed_ice", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTMAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:blue_ice", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkmywAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:snow_layer", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWQxAgAACgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:pointed_dripstone", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkyC8AAAoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:dripstone_block", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMEHAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:moss_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lk0AIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:moss_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWSsKgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:dirt_with_roots", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZF0hAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:hanging_roots", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRkAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:mangrove_roots", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lkLSkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:muddy_mangrove_roots", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkLAQAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:big_dripleaf", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMwmAAAKBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQMJAGRpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:small_dripleaf_block", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lk0xkAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgMAAAABDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:spore_blossom", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWRkLwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:azalea", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZAYsAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:flowering_azalea", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWSuIQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:glow_lichen", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkfyIAAAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:amethyst_block", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk9AIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:budding_amethyst", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWR/LAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:amethyst_cluster", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWRfMQAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:large_amethyst_bud", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZCIdAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:medium_amethyst_bud", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWQPGgAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:small_amethyst_bud", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZAMEAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:tuff", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWQwBAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:calcite", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWRuAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:chicken" - }, - { - "id": "minecraft:porkchop" - }, - { - "id": "minecraft:beef" - }, - { - "id": "minecraft:mutton" - }, - { - "id": "minecraft:rabbit" - }, - { - "id": "minecraft:cod" - }, - { - "id": "minecraft:salmon" - }, - { - "id": "minecraft:tropical_fish" - }, - { - "id": "minecraft:pufferfish" - }, - { - "id": "minecraft:brown_mushroom", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX211c2hyb29tBAkAbmFtZV9oYXNonYw/FO78WDoDCgBuZXR3b3JrX2lkHxUAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_mushroom", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZOcaAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:crimson_fungus", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkJDEAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:warped_fungus", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTRAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkli8AAAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:red_mushroom_block", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZGMVAAAKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkly8AAAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw8AAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkiC8AAAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cwAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:egg" - }, - { - "id": "minecraft:sugar_cane" - }, - { - "id": "minecraft:sugar" - }, - { - "id": "minecraft:rotten_flesh" - }, - { - "id": "minecraft:bone" - }, - { - "id": "minecraft:web", - "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZFArAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:spider_eye" - }, - { - "id": "minecraft:mob_spawner", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkagQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lk+hgAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUFAHN0b25lAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lk+xgAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAGNvYmJsZXN0b25lAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lk/BgAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAHN0b25lX2JyaWNrAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lk/RgAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGURAG1vc3N5X3N0b25lX2JyaWNrAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lk/hgAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUTAGNyYWNrZWRfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lk/xgAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUUAGNoaXNlbGVkX3N0b25lX2JyaWNrAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:infested_deepslate", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZMscAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:dragon_egg", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWQ6LwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:turtle_egg", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWQaMgAACgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sniffer_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lkgCwAAAoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:frog_spawn", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWQoGgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:pearlescent_froglight", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZEAqAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:verdant_froglight", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkeioAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:ochre_froglight", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZHoTAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:chicken_spawn_egg" - }, - { - "id": "minecraft:bee_spawn_egg" - }, - { - "id": "minecraft:cow_spawn_egg" - }, - { - "id": "minecraft:pig_spawn_egg" - }, - { - "id": "minecraft:sheep_spawn_egg" - }, - { - "id": "minecraft:wolf_spawn_egg" - }, - { - "id": "minecraft:polar_bear_spawn_egg" - }, - { - "id": "minecraft:ocelot_spawn_egg" - }, - { - "id": "minecraft:cat_spawn_egg" - }, - { - "id": "minecraft:mooshroom_spawn_egg" - }, - { - "id": "minecraft:bat_spawn_egg" - }, - { - "id": "minecraft:parrot_spawn_egg" - }, - { - "id": "minecraft:rabbit_spawn_egg" - }, - { - "id": "minecraft:llama_spawn_egg" - }, - { - "id": "minecraft:horse_spawn_egg" - }, - { - "id": "minecraft:donkey_spawn_egg" - }, - { - "id": "minecraft:mule_spawn_egg" - }, - { - "id": "minecraft:skeleton_horse_spawn_egg" - }, - { - "id": "minecraft:zombie_horse_spawn_egg" - }, - { - "id": "minecraft:tropical_fish_spawn_egg" - }, - { - "id": "minecraft:cod_spawn_egg" - }, - { - "id": "minecraft:pufferfish_spawn_egg" - }, - { - "id": "minecraft:salmon_spawn_egg" - }, - { - "id": "minecraft:dolphin_spawn_egg" - }, - { - "id": "minecraft:turtle_spawn_egg" - }, - { - "id": "minecraft:panda_spawn_egg" - }, - { - "id": "minecraft:fox_spawn_egg" - }, - { - "id": "minecraft:creeper_spawn_egg" - }, - { - "id": "minecraft:enderman_spawn_egg" - }, - { - "id": "minecraft:silverfish_spawn_egg" - }, - { - "id": "minecraft:skeleton_spawn_egg" - }, - { - "id": "minecraft:wither_skeleton_spawn_egg" - }, - { - "id": "minecraft:stray_spawn_egg" - }, - { - "id": "minecraft:slime_spawn_egg" - }, - { - "id": "minecraft:spider_spawn_egg" - }, - { - "id": "minecraft:zombie_spawn_egg" - }, - { - "id": "minecraft:zombie_pigman_spawn_egg" - }, - { - "id": "minecraft:husk_spawn_egg" - }, - { - "id": "minecraft:drowned_spawn_egg" - }, - { - "id": "minecraft:squid_spawn_egg" - }, - { - "id": "minecraft:glow_squid_spawn_egg" - }, - { - "id": "minecraft:cave_spider_spawn_egg" - }, - { - "id": "minecraft:witch_spawn_egg" - }, - { - "id": "minecraft:guardian_spawn_egg" - }, - { - "id": "minecraft:elder_guardian_spawn_egg" - }, - { - "id": "minecraft:endermite_spawn_egg" - }, - { - "id": "minecraft:magma_cube_spawn_egg" - }, - { - "id": "minecraft:strider_spawn_egg" - }, - { - "id": "minecraft:hoglin_spawn_egg" - }, - { - "id": "minecraft:piglin_spawn_egg" - }, - { - "id": "minecraft:zoglin_spawn_egg" - }, - { - "id": "minecraft:piglin_brute_spawn_egg" - }, - { - "id": "minecraft:goat_spawn_egg" - }, - { - "id": "minecraft:axolotl_spawn_egg" - }, - { - "id": "minecraft:warden_spawn_egg" - }, - { - "id": "minecraft:allay_spawn_egg" - }, - { - "id": "minecraft:frog_spawn_egg" - }, - { - "id": "minecraft:tadpole_spawn_egg" - }, - { - "id": "minecraft:trader_llama_spawn_egg" - }, - { - "id": "minecraft:camel_spawn_egg" - }, - { - "id": "minecraft:ghast_spawn_egg" - }, - { - "id": "minecraft:blaze_spawn_egg" - }, - { - "id": "minecraft:shulker_spawn_egg" - }, - { - "id": "minecraft:vindicator_spawn_egg" - }, - { - "id": "minecraft:evoker_spawn_egg" - }, - { - "id": "minecraft:vex_spawn_egg" - }, - { - "id": "minecraft:villager_spawn_egg" - }, - { - "id": "minecraft:wandering_trader_spawn_egg" - }, - { - "id": "minecraft:zombie_villager_spawn_egg" - }, - { - "id": "minecraft:phantom_spawn_egg" - }, - { - "id": "minecraft:pillager_spawn_egg" - }, - { - "id": "minecraft:ravager_spawn_egg" - }, - { - "id": "minecraft:iron_golem_spawn_egg" - }, - { - "id": "minecraft:snow_golem_spawn_egg" - }, - { - "id": "minecraft:sniffer_spawn_egg" - }, - { - "id": "minecraft:obsidian", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkhQQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:crying_obsidian", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZForAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:bedrock", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWSRLAAACgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:soul_sand", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBMjAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:magma", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkJjIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:nether_wart" - }, - { - "id": "minecraft:end_stone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZMYXAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:chorus_flower", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWSvGgAACgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:chorus_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZMshAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:chorus_fruit" - }, - { - "id": "minecraft:popped_chorus_fruit" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZDkFAAAKBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAZHJ5AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZDoFAAAKBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAd2V0AAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkuyAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkvCAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkvSAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkviAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkvyAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkwCAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkwSAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkwiAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAEAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkwyAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAEAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkxCAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAEAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:sculk", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkpSwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sculk_vein", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSWLgAACgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:sculk_catalyst", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkZRUAAAoGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sculk_shrieker", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkdQIAAAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sculk_sensor", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZB0aAAAKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:calibrated_sculk_sensor", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkqCQAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:reinforced_deepslate", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lklCQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:leather_helmet" - }, - { - "id": "minecraft:chainmail_helmet" - }, - { - "id": "minecraft:iron_helmet" - }, - { - "id": "minecraft:golden_helmet" - }, - { - "id": "minecraft:diamond_helmet" - }, - { - "id": "minecraft:netherite_helmet" - }, - { - "id": "minecraft:leather_chestplate" - }, - { - "id": "minecraft:chainmail_chestplate" - }, - { - "id": "minecraft:iron_chestplate" - }, - { - "id": "minecraft:golden_chestplate" - }, - { - "id": "minecraft:diamond_chestplate" - }, - { - "id": "minecraft:netherite_chestplate" - }, - { - "id": "minecraft:leather_leggings" - }, - { - "id": "minecraft:chainmail_leggings" - }, - { - "id": "minecraft:iron_leggings" - }, - { - "id": "minecraft:golden_leggings" - }, - { - "id": "minecraft:diamond_leggings" - }, - { - "id": "minecraft:netherite_leggings" - }, - { - "id": "minecraft:leather_boots" - }, - { - "id": "minecraft:chainmail_boots" - }, - { - "id": "minecraft:iron_boots" - }, - { - "id": "minecraft:golden_boots" - }, - { - "id": "minecraft:diamond_boots" - }, - { - "id": "minecraft:netherite_boots" - }, - { - "id": "minecraft:wooden_sword" - }, - { - "id": "minecraft:stone_sword" - }, - { - "id": "minecraft:iron_sword" - }, - { - "id": "minecraft:golden_sword" - }, - { - "id": "minecraft:diamond_sword" - }, - { - "id": "minecraft:netherite_sword" - }, - { - "id": "minecraft:wooden_axe" - }, - { - "id": "minecraft:stone_axe" - }, - { - "id": "minecraft:iron_axe" - }, - { - "id": "minecraft:golden_axe" - }, - { - "id": "minecraft:diamond_axe" - }, - { - "id": "minecraft:netherite_axe" - }, - { - "id": "minecraft:wooden_pickaxe" - }, - { - "id": "minecraft:stone_pickaxe" - }, - { - "id": "minecraft:iron_pickaxe" - }, - { - "id": "minecraft:golden_pickaxe" - }, - { - "id": "minecraft:diamond_pickaxe" - }, - { - "id": "minecraft:netherite_pickaxe" - }, - { - "id": "minecraft:wooden_shovel" - }, - { - "id": "minecraft:stone_shovel" - }, - { - "id": "minecraft:iron_shovel" - }, - { - "id": "minecraft:golden_shovel" - }, - { - "id": "minecraft:diamond_shovel" - }, - { - "id": "minecraft:netherite_shovel" - }, - { - "id": "minecraft:wooden_hoe" - }, - { - "id": "minecraft:stone_hoe" - }, - { - "id": "minecraft:iron_hoe" - }, - { - "id": "minecraft:golden_hoe" - }, - { - "id": "minecraft:diamond_hoe" - }, - { - "id": "minecraft:netherite_hoe" - }, - { - "id": "minecraft:bow" - }, - { - "id": "minecraft:crossbow" - }, - { - "id": "minecraft:arrow" - }, - { - "id": "minecraft:arrow", - "damage": 6 - }, - { - "id": "minecraft:arrow", - "damage": 7 - }, - { - "id": "minecraft:arrow", - "damage": 8 - }, - { - "id": "minecraft:arrow", - "damage": 9 - }, - { - "id": "minecraft:arrow", - "damage": 10 - }, - { - "id": "minecraft:arrow", - "damage": 11 - }, - { - "id": "minecraft:arrow", - "damage": 12 - }, - { - "id": "minecraft:arrow", - "damage": 13 - }, - { - "id": "minecraft:arrow", - "damage": 14 - }, - { - "id": "minecraft:arrow", - "damage": 15 - }, - { - "id": "minecraft:arrow", - "damage": 16 - }, - { - "id": "minecraft:arrow", - "damage": 17 - }, - { - "id": "minecraft:arrow", - "damage": 18 - }, - { - "id": "minecraft:arrow", - "damage": 19 - }, - { - "id": "minecraft:arrow", - "damage": 20 - }, - { - "id": "minecraft:arrow", - "damage": 21 - }, - { - "id": "minecraft:arrow", - "damage": 22 - }, - { - "id": "minecraft:arrow", - "damage": 23 - }, - { - "id": "minecraft:arrow", - "damage": 24 - }, - { - "id": "minecraft:arrow", - "damage": 25 - }, - { - "id": "minecraft:arrow", - "damage": 26 - }, - { - "id": "minecraft:arrow", - "damage": 27 - }, - { - "id": "minecraft:arrow", - "damage": 28 - }, - { - "id": "minecraft:arrow", - "damage": 29 - }, - { - "id": "minecraft:arrow", - "damage": 30 - }, - { - "id": "minecraft:arrow", - "damage": 31 - }, - { - "id": "minecraft:arrow", - "damage": 32 - }, - { - "id": "minecraft:arrow", - "damage": 33 - }, - { - "id": "minecraft:arrow", - "damage": 34 - }, - { - "id": "minecraft:arrow", - "damage": 35 - }, - { - "id": "minecraft:arrow", - "damage": 36 - }, - { - "id": "minecraft:arrow", - "damage": 37 - }, - { - "id": "minecraft:arrow", - "damage": 38 - }, - { - "id": "minecraft:arrow", - "damage": 39 - }, - { - "id": "minecraft:arrow", - "damage": 40 - }, - { - "id": "minecraft:arrow", - "damage": 41 - }, - { - "id": "minecraft:arrow", - "damage": 42 - }, - { - "id": "minecraft:arrow", - "damage": 43 - }, - { - "id": "minecraft:shield" - }, - { - "id": "minecraft:cooked_chicken" - }, - { - "id": "minecraft:cooked_porkchop" - }, - { - "id": "minecraft:cooked_beef" - }, - { - "id": "minecraft:cooked_mutton" - }, - { - "id": "minecraft:cooked_rabbit" - }, - { - "id": "minecraft:cooked_cod" - }, - { - "id": "minecraft:cooked_salmon" - }, - { - "id": "minecraft:bread" - }, - { - "id": "minecraft:mushroom_stew" - }, - { - "id": "minecraft:beetroot_soup" - }, - { - "id": "minecraft:rabbit_stew" - }, - { - "id": "minecraft:baked_potato" - }, - { - "id": "minecraft:cookie" - }, - { - "id": "minecraft:pumpkin_pie" - }, - { - "id": "minecraft:cake" - }, - { - "id": "minecraft:dried_kelp" - }, - { - "id": "minecraft:fishing_rod" - }, - { - "id": "minecraft:carrot_on_a_stick" - }, - { - "id": "minecraft:warped_fungus_on_a_stick" - }, - { - "id": "minecraft:snowball" - }, - { - "id": "minecraft:shears" - }, - { - "id": "minecraft:flint_and_steel" - }, - { - "id": "minecraft:lead" - }, - { - "id": "minecraft:clock" - }, - { - "id": "minecraft:compass" - }, - { - "id": "minecraft:recovery_compass" - }, - { - "id": "minecraft:goat_horn" - }, - { - "id": "minecraft:goat_horn", - "damage": 1 - }, - { - "id": "minecraft:goat_horn", - "damage": 2 - }, - { - "id": "minecraft:goat_horn", - "damage": 3 - }, - { - "id": "minecraft:goat_horn", - "damage": 4 - }, - { - "id": "minecraft:goat_horn", - "damage": 5 - }, - { - "id": "minecraft:goat_horn", - "damage": 6 - }, - { - "id": "minecraft:goat_horn", - "damage": 7 - }, - { - "id": "minecraft:empty_map" - }, - { - "id": "minecraft:empty_map", - "damage": 2 - }, - { - "id": "minecraft:saddle" - }, - { - "id": "minecraft:leather_horse_armor" - }, - { - "id": "minecraft:iron_horse_armor" - }, - { - "id": "minecraft:golden_horse_armor" - }, - { - "id": "minecraft:diamond_horse_armor" - }, - { - "id": "minecraft:trident" - }, - { - "id": "minecraft:turtle_helmet" - }, - { - "id": "minecraft:elytra" - }, - { - "id": "minecraft:totem_of_undying" - }, - { - "id": "minecraft:glass_bottle" - }, - { - "id": "minecraft:experience_bottle" - }, - { - "id": "minecraft:potion" - }, - { - "id": "minecraft:potion", - "damage": 1 - }, - { - "id": "minecraft:potion", - "damage": 2 - }, - { - "id": "minecraft:potion", - "damage": 3 - }, - { - "id": "minecraft:potion", - "damage": 4 - }, - { - "id": "minecraft:potion", - "damage": 5 - }, - { - "id": "minecraft:potion", - "damage": 6 - }, - { - "id": "minecraft:potion", - "damage": 7 - }, - { - "id": "minecraft:potion", - "damage": 8 - }, - { - "id": "minecraft:potion", - "damage": 9 - }, - { - "id": "minecraft:potion", - "damage": 10 - }, - { - "id": "minecraft:potion", - "damage": 11 - }, - { - "id": "minecraft:potion", - "damage": 12 - }, - { - "id": "minecraft:potion", - "damage": 13 - }, - { - "id": "minecraft:potion", - "damage": 14 - }, - { - "id": "minecraft:potion", - "damage": 15 - }, - { - "id": "minecraft:potion", - "damage": 16 - }, - { - "id": "minecraft:potion", - "damage": 17 - }, - { - "id": "minecraft:potion", - "damage": 18 - }, - { - "id": "minecraft:potion", - "damage": 19 - }, - { - "id": "minecraft:potion", - "damage": 20 - }, - { - "id": "minecraft:potion", - "damage": 21 - }, - { - "id": "minecraft:potion", - "damage": 22 - }, - { - "id": "minecraft:potion", - "damage": 23 - }, - { - "id": "minecraft:potion", - "damage": 24 - }, - { - "id": "minecraft:potion", - "damage": 25 - }, - { - "id": "minecraft:potion", - "damage": 26 - }, - { - "id": "minecraft:potion", - "damage": 27 - }, - { - "id": "minecraft:potion", - "damage": 28 - }, - { - "id": "minecraft:potion", - "damage": 29 - }, - { - "id": "minecraft:potion", - "damage": 30 - }, - { - "id": "minecraft:potion", - "damage": 31 - }, - { - "id": "minecraft:potion", - "damage": 32 - }, - { - "id": "minecraft:potion", - "damage": 33 - }, - { - "id": "minecraft:potion", - "damage": 34 - }, - { - "id": "minecraft:potion", - "damage": 35 - }, - { - "id": "minecraft:potion", - "damage": 36 - }, - { - "id": "minecraft:potion", - "damage": 37 - }, - { - "id": "minecraft:potion", - "damage": 38 - }, - { - "id": "minecraft:potion", - "damage": 39 - }, - { - "id": "minecraft:potion", - "damage": 40 - }, - { - "id": "minecraft:potion", - "damage": 41 - }, - { - "id": "minecraft:potion", - "damage": 42 - }, - { - "id": "minecraft:splash_potion" - }, - { - "id": "minecraft:splash_potion", - "damage": 1 - }, - { - "id": "minecraft:splash_potion", - "damage": 2 - }, - { - "id": "minecraft:splash_potion", - "damage": 3 - }, - { - "id": "minecraft:splash_potion", - "damage": 4 - }, - { - "id": "minecraft:splash_potion", - "damage": 5 - }, - { - "id": "minecraft:splash_potion", - "damage": 6 - }, - { - "id": "minecraft:splash_potion", - "damage": 7 - }, - { - "id": "minecraft:splash_potion", - "damage": 8 - }, - { - "id": "minecraft:splash_potion", - "damage": 9 - }, - { - "id": "minecraft:splash_potion", - "damage": 10 - }, - { - "id": "minecraft:splash_potion", - "damage": 11 - }, - { - "id": "minecraft:splash_potion", - "damage": 12 - }, - { - "id": "minecraft:splash_potion", - "damage": 13 - }, - { - "id": "minecraft:splash_potion", - "damage": 14 - }, - { - "id": "minecraft:splash_potion", - "damage": 15 - }, - { - "id": "minecraft:splash_potion", - "damage": 16 - }, - { - "id": "minecraft:splash_potion", - "damage": 17 - }, - { - "id": "minecraft:splash_potion", - "damage": 18 - }, - { - "id": "minecraft:splash_potion", - "damage": 19 - }, - { - "id": "minecraft:splash_potion", - "damage": 20 - }, - { - "id": "minecraft:splash_potion", - "damage": 21 - }, - { - "id": "minecraft:splash_potion", - "damage": 22 - }, - { - "id": "minecraft:splash_potion", - "damage": 23 - }, - { - "id": "minecraft:splash_potion", - "damage": 24 - }, - { - "id": "minecraft:splash_potion", - "damage": 25 - }, - { - "id": "minecraft:splash_potion", - "damage": 26 - }, - { - "id": "minecraft:splash_potion", - "damage": 27 - }, - { - "id": "minecraft:splash_potion", - "damage": 28 - }, - { - "id": "minecraft:splash_potion", - "damage": 29 - }, - { - "id": "minecraft:splash_potion", - "damage": 30 - }, - { - "id": "minecraft:splash_potion", - "damage": 31 - }, - { - "id": "minecraft:splash_potion", - "damage": 32 - }, - { - "id": "minecraft:splash_potion", - "damage": 33 - }, - { - "id": "minecraft:splash_potion", - "damage": 34 - }, - { - "id": "minecraft:splash_potion", - "damage": 35 - }, - { - "id": "minecraft:splash_potion", - "damage": 36 - }, - { - "id": "minecraft:splash_potion", - "damage": 37 - }, - { - "id": "minecraft:splash_potion", - "damage": 38 - }, - { - "id": "minecraft:splash_potion", - "damage": 39 - }, - { - "id": "minecraft:splash_potion", - "damage": 40 - }, - { - "id": "minecraft:splash_potion", - "damage": 41 - }, - { - "id": "minecraft:splash_potion", - "damage": 42 - }, - { - "id": "minecraft:lingering_potion" - }, - { - "id": "minecraft:lingering_potion", - "damage": 1 - }, - { - "id": "minecraft:lingering_potion", - "damage": 2 - }, - { - "id": "minecraft:lingering_potion", - "damage": 3 - }, - { - "id": "minecraft:lingering_potion", - "damage": 4 - }, - { - "id": "minecraft:lingering_potion", - "damage": 5 - }, - { - "id": "minecraft:lingering_potion", - "damage": 6 - }, - { - "id": "minecraft:lingering_potion", - "damage": 7 - }, - { - "id": "minecraft:lingering_potion", - "damage": 8 - }, - { - "id": "minecraft:lingering_potion", - "damage": 9 - }, - { - "id": "minecraft:lingering_potion", - "damage": 10 - }, - { - "id": "minecraft:lingering_potion", - "damage": 11 - }, - { - "id": "minecraft:lingering_potion", - "damage": 12 - }, - { - "id": "minecraft:lingering_potion", - "damage": 13 - }, - { - "id": "minecraft:lingering_potion", - "damage": 14 - }, - { - "id": "minecraft:lingering_potion", - "damage": 15 - }, - { - "id": "minecraft:lingering_potion", - "damage": 16 - }, - { - "id": "minecraft:lingering_potion", - "damage": 17 - }, - { - "id": "minecraft:lingering_potion", - "damage": 18 - }, - { - "id": "minecraft:lingering_potion", - "damage": 19 - }, - { - "id": "minecraft:lingering_potion", - "damage": 20 - }, - { - "id": "minecraft:lingering_potion", - "damage": 21 - }, - { - "id": "minecraft:lingering_potion", - "damage": 22 - }, - { - "id": "minecraft:lingering_potion", - "damage": 23 - }, - { - "id": "minecraft:lingering_potion", - "damage": 24 - }, - { - "id": "minecraft:lingering_potion", - "damage": 25 - }, - { - "id": "minecraft:lingering_potion", - "damage": 26 - }, - { - "id": "minecraft:lingering_potion", - "damage": 27 - }, - { - "id": "minecraft:lingering_potion", - "damage": 28 - }, - { - "id": "minecraft:lingering_potion", - "damage": 29 - }, - { - "id": "minecraft:lingering_potion", - "damage": 30 - }, - { - "id": "minecraft:lingering_potion", - "damage": 31 - }, - { - "id": "minecraft:lingering_potion", - "damage": 32 - }, - { - "id": "minecraft:lingering_potion", - "damage": 33 - }, - { - "id": "minecraft:lingering_potion", - "damage": 34 - }, - { - "id": "minecraft:lingering_potion", - "damage": 35 - }, - { - "id": "minecraft:lingering_potion", - "damage": 36 - }, - { - "id": "minecraft:lingering_potion", - "damage": 37 - }, - { - "id": "minecraft:lingering_potion", - "damage": 38 - }, - { - "id": "minecraft:lingering_potion", - "damage": 39 - }, - { - "id": "minecraft:lingering_potion", - "damage": 40 - }, - { - "id": "minecraft:lingering_potion", - "damage": 41 - }, - { - "id": "minecraft:lingering_potion", - "damage": 42 - }, - { - "id": "minecraft:spyglass" - }, - { - "id": "minecraft:brush" - }, - { - "id": "minecraft:stick" - }, - { - "id": "minecraft:bed" - }, - { - "id": "minecraft:bed", - "damage": 8 - }, - { - "id": "minecraft:bed", - "damage": 7 - }, - { - "id": "minecraft:bed", - "damage": 15 - }, - { - "id": "minecraft:bed", - "damage": 12 - }, - { - "id": "minecraft:bed", - "damage": 14 - }, - { - "id": "minecraft:bed", - "damage": 1 - }, - { - "id": "minecraft:bed", - "damage": 4 - }, - { - "id": "minecraft:bed", - "damage": 5 - }, - { - "id": "minecraft:bed", - "damage": 13 - }, - { - "id": "minecraft:bed", - "damage": 9 - }, - { - "id": "minecraft:bed", - "damage": 3 - }, - { - "id": "minecraft:bed", - "damage": 11 - }, - { - "id": "minecraft:bed", - "damage": 10 - }, - { - "id": "minecraft:bed", - "damage": 2 - }, - { - "id": "minecraft:bed", - "damage": 6 - }, - { - "id": "minecraft:torch", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lkGAcAAAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:soul_torch", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWTOHAAACgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sea_pickle", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWS7JAAACgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:lantern", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWTMLAAACgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:soul_lantern", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZMEiAAAKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:candle", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZLsvAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:white_candle", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZAohAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:orange_candle", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWRBBAAACgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:magenta_candle", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lkewQAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:light_blue_candle", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk1hoAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:yellow_candle", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWQ+KQAACgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:lime_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lk/SkAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:pink_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lkmS8AAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:gray_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lkAAgAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:light_gray_candle", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkaykAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cyan_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkCDEAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:purple_candle", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLAAACgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:blue_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkAAAAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:brown_candle", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZF8mAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:green_candle", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZOoGAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:red_candle", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWTzHAAACgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:black_candle", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZEECAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:crafting_table", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkuiQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cartography_table", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkVDMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:fletching_table", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJUkAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:smithing_table", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lk2RUAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:beehive", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWTqKAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:suspicious_sand", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZNAIAAAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:suspicious_gravel", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkKB0AAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:campfire" - }, - { - "id": "minecraft:soul_campfire" - }, - { - "id": "minecraft:furnace", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRXMQAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:blast_furnace", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWRhMAAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:smoker", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZMwGAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:respawn_anchor", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lk5AYAAAoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:brewing_stand" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkDCsAAAoGAHN0YXRlcwgGAGRhbWFnZQkAdW5kYW1hZ2VkAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkECsAAAoGAHN0YXRlcwgGAGRhbWFnZRAAc2xpZ2h0bHlfZGFtYWdlZAMJAGRpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkFCsAAAoGAHN0YXRlcwgGAGRhbWFnZQwAdmVyeV9kYW1hZ2VkAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:grindstone", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWREMgAACgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:enchanting_table", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRgKwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:bookshelf", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZDErAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:chiseled_bookshelf", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZPgCAAAKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:lectern", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWRALAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cauldron" - }, - { - "id": "minecraft:composter", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHAhAAAKBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:chest", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lk9ywAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:trapped_chest", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWQZIgAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:ender_chest", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkCBoAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:barrel", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZKMaAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:undyed_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZKwVAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:white_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkPwQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:light_gray_shulker_box", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWR/JgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:gray_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWQtIQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:black_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkhSgAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:brown_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkBSwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:red_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZEkaAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:orange_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGopAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:yellow_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZHUAAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:lime_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWQBBAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:green_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkgioAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:cyan_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWScLAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:light_blue_shulker_box", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWRbLAAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:blue_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWSTKQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:purple_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZKEvAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:magenta_shulker_box", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTLAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:pink_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQUGgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:armor_stand" - }, - { - "id": "minecraft:noteblock", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZC8EAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:jukebox", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWQ9HwAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:music_disc_13" - }, - { - "id": "minecraft:music_disc_cat" - }, - { - "id": "minecraft:music_disc_blocks" - }, - { - "id": "minecraft:music_disc_chirp" - }, - { - "id": "minecraft:music_disc_far" - }, - { - "id": "minecraft:music_disc_mall" - }, - { - "id": "minecraft:music_disc_mellohi" - }, - { - "id": "minecraft:music_disc_stal" - }, - { - "id": "minecraft:music_disc_strad" - }, - { - "id": "minecraft:music_disc_ward" - }, - { - "id": "minecraft:music_disc_11" - }, - { - "id": "minecraft:music_disc_wait" - }, - { - "id": "minecraft:music_disc_otherside" - }, - { - "id": "minecraft:music_disc_5" - }, - { - "id": "minecraft:music_disc_pigstep" - }, - { - "id": "minecraft:music_disc_relic" - }, - { - "id": "minecraft:disc_fragment_5" - }, - { - "id": "minecraft:glowstone_dust" - }, - { - "id": "minecraft:glowstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZPcXAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:redstone_lamp", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWSXAgAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:sea_lantern", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lkTDAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:oak_sign" - }, - { - "id": "minecraft:spruce_sign" - }, - { - "id": "minecraft:birch_sign" - }, - { - "id": "minecraft:jungle_sign" - }, - { - "id": "minecraft:acacia_sign" - }, - { - "id": "minecraft:dark_oak_sign" - }, - { - "id": "minecraft:mangrove_sign" - }, - { - "id": "minecraft:cherry_sign" - }, - { - "id": "minecraft:bamboo_sign" - }, - { - "id": "minecraft:crimson_sign" - }, - { - "id": "minecraft:warped_sign" - }, - { - "id": "minecraft:oak_hanging_sign" - }, - { - "id": "minecraft:spruce_hanging_sign" - }, - { - "id": "minecraft:birch_hanging_sign" - }, - { - "id": "minecraft:jungle_hanging_sign" - }, - { - "id": "minecraft:acacia_hanging_sign" - }, - { - "id": "minecraft:dark_oak_hanging_sign" - }, - { - "id": "minecraft:mangrove_hanging_sign" - }, - { - "id": "minecraft:cherry_hanging_sign" - }, - { - "id": "minecraft:bamboo_hanging_sign" - }, - { - "id": "minecraft:crimson_hanging_sign" - }, - { - "id": "minecraft:warped_hanging_sign" - }, - { - "id": "minecraft:painting" - }, - { - "id": "minecraft:frame" - }, - { - "id": "minecraft:glow_frame" - }, - { - "id": "minecraft:honey_bottle" - }, - { - "id": "minecraft:flower_pot" - }, - { - "id": "minecraft:bowl" - }, - { - "id": "minecraft:bucket" - }, - { - "id": "minecraft:milk_bucket" - }, - { - "id": "minecraft:water_bucket" - }, - { - "id": "minecraft:lava_bucket" - }, - { - "id": "minecraft:cod_bucket" - }, - { - "id": "minecraft:salmon_bucket" - }, - { - "id": "minecraft:tropical_fish_bucket" - }, - { - "id": "minecraft:pufferfish_bucket" - }, - { - "id": "minecraft:powder_snow_bucket" - }, - { - "id": "minecraft:axolotl_bucket" - }, - { - "id": "minecraft:tadpole_bucket" - }, - { - "id": "minecraft:skull", - "damage": 3 - }, - { - "id": "minecraft:skull", - "damage": 2 - }, - { - "id": "minecraft:skull", - "damage": 4 - }, - { - "id": "minecraft:skull", - "damage": 5 - }, - { - "id": "minecraft:skull" - }, - { - "id": "minecraft:skull", - "damage": 1 - }, - { - "id": "minecraft:skull", - "damage": 6 - }, - { - "id": "minecraft:beacon", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZCcCAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:bell", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWQgLAAACgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:conduit", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWRVGQAACgYAc3RhdGVzAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stonecutter_block", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lkaDAAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:end_portal_frame", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWS7KAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAESAGVuZF9wb3J0YWxfZXllX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:coal" - }, - { - "id": "minecraft:charcoal" - }, - { - "id": "minecraft:diamond" - }, - { - "id": "minecraft:iron_nugget" - }, - { - "id": "minecraft:raw_iron" - }, - { - "id": "minecraft:raw_gold" - }, - { - "id": "minecraft:raw_copper" - }, - { - "id": "minecraft:copper_ingot" - }, - { - "id": "minecraft:iron_ingot" - }, - { - "id": "minecraft:netherite_scrap" - }, - { - "id": "minecraft:netherite_ingot" - }, - { - "id": "minecraft:gold_nugget" - }, - { - "id": "minecraft:gold_ingot" - }, - { - "id": "minecraft:emerald" - }, - { - "id": "minecraft:quartz" - }, - { - "id": "minecraft:clay_ball" - }, - { - "id": "minecraft:brick" - }, - { - "id": "minecraft:netherbrick" - }, - { - "id": "minecraft:prismarine_shard" - }, - { - "id": "minecraft:amethyst_shard" - }, - { - "id": "minecraft:prismarine_crystals" - }, - { - "id": "minecraft:nautilus_shell" - }, - { - "id": "minecraft:heart_of_the_sea" - }, - { - "id": "minecraft:scute" - }, - { - "id": "minecraft:phantom_membrane" - }, - { - "id": "minecraft:string" - }, - { - "id": "minecraft:feather" - }, - { - "id": "minecraft:flint" - }, - { - "id": "minecraft:gunpowder" - }, - { - "id": "minecraft:leather" - }, - { - "id": "minecraft:rabbit_hide" - }, - { - "id": "minecraft:rabbit_foot" - }, - { - "id": "minecraft:fire_charge" - }, - { - "id": "minecraft:blaze_rod" - }, - { - "id": "minecraft:blaze_powder" - }, - { - "id": "minecraft:magma_cream" - }, - { - "id": "minecraft:fermented_spider_eye" - }, - { - "id": "minecraft:echo_shard" - }, - { - "id": "minecraft:dragon_breath" - }, - { - "id": "minecraft:shulker_shell" - }, - { - "id": "minecraft:ghast_tear" - }, - { - "id": "minecraft:slime_ball" - }, - { - "id": "minecraft:ender_pearl" - }, - { - "id": "minecraft:ender_eye" - }, - { - "id": "minecraft:nether_star" - }, - { - "id": "minecraft:end_rod", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmVuZF9yb2QECQBuYW1lX2hhc2jx/q5cEA0hmQMKAG5ldHdvcmtfaWRvJgAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:lightning_rod", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWTnCAAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:end_crystal" - }, - { - "id": "minecraft:paper" - }, - { - "id": "minecraft:book" - }, - { - "id": "minecraft:writable_book" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQIAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQQAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQVAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQWAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQaAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQbAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQcAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQgAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQhAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:oak_boat" - }, - { - "id": "minecraft:spruce_boat" - }, - { - "id": "minecraft:birch_boat" - }, - { - "id": "minecraft:jungle_boat" - }, - { - "id": "minecraft:acacia_boat" - }, - { - "id": "minecraft:dark_oak_boat" - }, - { - "id": "minecraft:mangrove_boat" - }, - { - "id": "minecraft:cherry_boat" - }, - { - "id": "minecraft:bamboo_raft" - }, - { - "id": "minecraft:oak_chest_boat" - }, - { - "id": "minecraft:spruce_chest_boat" - }, - { - "id": "minecraft:birch_chest_boat" - }, - { - "id": "minecraft:jungle_chest_boat" - }, - { - "id": "minecraft:acacia_chest_boat" - }, - { - "id": "minecraft:dark_oak_chest_boat" - }, - { - "id": "minecraft:mangrove_chest_boat" - }, - { - "id": "minecraft:cherry_chest_boat" - }, - { - "id": "minecraft:bamboo_chest_raft" - }, - { - "id": "minecraft:rail", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWQaGAAACgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:golden_rail", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkGiEAAAoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:detector_rail", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWTuGAAACgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:activator_rail", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkCAQAAAoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:minecart" - }, - { - "id": "minecraft:chest_minecart" - }, - { - "id": "minecraft:hopper_minecart" - }, - { - "id": "minecraft:tnt_minecart" - }, - { - "id": "minecraft:redstone" - }, - { - "id": "minecraft:redstone_block", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lkEBYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:redstone_torch", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkiRMAAAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:lever", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkkioAAAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wooden_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWQUKgAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:spruce_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTUGQAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:birch_button", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZDMxAAAKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:jungle_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWR5AAAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:acacia_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWQKLwAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:dark_oak_button", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZGAAAAAKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:mangrove_button", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZL8sAAAKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cherry_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWQNGwAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:bamboo_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWRtKgAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_button", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZC0FAAAKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:crimson_button", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lkTRoAAAoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:warped_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWQdLwAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:polished_blackstone_button", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkSzEAAAoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:tripwire_hook", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSKJgAACgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:wooden_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZF0yAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:spruce_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZP4VAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:birch_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkKBUAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:jungle_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZH4VAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:acacia_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZMUgAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:dark_oak_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lktCYAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:mangrove_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lk5xcAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:cherry_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZI8AAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:bamboo_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZMMoAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:crimson_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRAMwAACgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:warped_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZK4CAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:stone_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lk+BcAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:light_weighted_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lknBUAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:heavy_weighted_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lk1wgAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:polished_blackstone_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWRzKQAACgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:observer", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkfRMAAAoGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:daylight_detector", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkMhkAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:repeater" - }, - { - "id": "minecraft:comparator" - }, - { - "id": "minecraft:hopper" - }, - { - "id": "minecraft:dropper", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWSpLwAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:dispenser", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZCoyAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24gChQBAA==" - }, - { - "id": "minecraft:piston", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZO4HAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:sticky_piston", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWQDGgAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:tnt", - "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZEorAAAKBgBzdGF0ZXMBFABhbGxvd191bmRlcndhdGVyX2JpdAABCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:name_tag" - }, - { - "id": "minecraft:loom", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWTCFwAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:banner" - }, - { - "id": "minecraft:banner", - "damage": 8 - }, - { - "id": "minecraft:banner", - "damage": 7 - }, - { - "id": "minecraft:banner", - "damage": 15 - }, - { - "id": "minecraft:banner", - "damage": 12 - }, - { - "id": "minecraft:banner", - "damage": 14 - }, - { - "id": "minecraft:banner", - "damage": 1 - }, - { - "id": "minecraft:banner", - "damage": 4 - }, - { - "id": "minecraft:banner", - "damage": 5 - }, - { - "id": "minecraft:banner", - "damage": 13 - }, - { - "id": "minecraft:banner", - "damage": 9 - }, - { - "id": "minecraft:banner", - "damage": 3 - }, - { - "id": "minecraft:banner", - "damage": 11 - }, - { - "id": "minecraft:banner", - "damage": 10 - }, - { - "id": "minecraft:banner", - "damage": 2 - }, - { - "id": "minecraft:banner", - "damage": 6 - }, - { - "id": "minecraft:banner", - "damage": 15, - "nbt_b64": "CgAAAwQAVHlwZQEAAAAA" - }, - { - "id": "minecraft:creeper_banner_pattern" - }, - { - "id": "minecraft:skull_banner_pattern" - }, - { - "id": "minecraft:flower_banner_pattern" - }, - { - "id": "minecraft:mojang_banner_pattern" - }, - { - "id": "minecraft:field_masoned_banner_pattern" - }, - { - "id": "minecraft:bordure_indented_banner_pattern" - }, - { - "id": "minecraft:piglin_banner_pattern" - }, - { - "id": "minecraft:globe_banner_pattern" - }, - { - "id": "minecraft:angler_pottery_sherd" - }, - { - "id": "minecraft:archer_pottery_sherd" - }, - { - "id": "minecraft:arms_up_pottery_sherd" - }, - { - "id": "minecraft:blade_pottery_sherd" - }, - { - "id": "minecraft:brewer_pottery_sherd" - }, - { - "id": "minecraft:burn_pottery_sherd" - }, - { - "id": "minecraft:danger_pottery_sherd" - }, - { - "id": "minecraft:explorer_pottery_sherd" - }, - { - "id": "minecraft:friend_pottery_sherd" - }, - { - "id": "minecraft:heart_pottery_sherd" - }, - { - "id": "minecraft:heartbreak_pottery_sherd" - }, - { - "id": "minecraft:howl_pottery_sherd" - }, - { - "id": "minecraft:miner_pottery_sherd" - }, - { - "id": "minecraft:mourner_pottery_sherd" - }, - { - "id": "minecraft:plenty_pottery_sherd" - }, - { - "id": "minecraft:prize_pottery_sherd" - }, - { - "id": "minecraft:sheaf_pottery_sherd" - }, - { - "id": "minecraft:shelter_pottery_sherd" - }, - { - "id": "minecraft:skull_pottery_sherd" - }, - { - "id": "minecraft:snort_pottery_sherd" - }, - { - "id": "minecraft:netherite_upgrade_smithing_template" - }, - { - "id": "minecraft:sentry_armor_trim_smithing_template" - }, - { - "id": "minecraft:vex_armor_trim_smithing_template" - }, - { - "id": "minecraft:wild_armor_trim_smithing_template" - }, - { - "id": "minecraft:coast_armor_trim_smithing_template" - }, - { - "id": "minecraft:dune_armor_trim_smithing_template" - }, - { - "id": "minecraft:wayfinder_armor_trim_smithing_template" - }, - { - "id": "minecraft:shaper_armor_trim_smithing_template" - }, - { - "id": "minecraft:raiser_armor_trim_smithing_template" - }, - { - "id": "minecraft:host_armor_trim_smithing_template" - }, - { - "id": "minecraft:ward_armor_trim_smithing_template" - }, - { - "id": "minecraft:silence_armor_trim_smithing_template" - }, - { - "id": "minecraft:tide_armor_trim_smithing_template" - }, - { - "id": "minecraft:snout_armor_trim_smithing_template" - }, - { - "id": "minecraft:rib_armor_trim_smithing_template" - }, - { - "id": "minecraft:eye_armor_trim_smithing_template" - }, - { - "id": "minecraft:spire_armor_trim_smithing_template" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwAAAAAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAABwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAIBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAHBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAPBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAMBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAOBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAABBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAEBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAFBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAANBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAJBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAADBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAALBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAKBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAACBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAGBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_star", - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yIR0d/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 8, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yUk9H/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 7, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yl52d/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 15, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y8PDw/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 12, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y2rM6/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 14, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yHYD5/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 1, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yJi6w/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 4, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqkQ8/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 5, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yuDKJ/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 13, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yvU7H/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 9, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqovz/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 3, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yMlSD/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 11, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yPdj+/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 10, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yH8eA/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 2, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yFnxe/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 6, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9ynJwW/wA=" - }, - { - "id": "minecraft:chain" - }, - { - "id": "minecraft:target", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZBMqAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbiAKFAEA" - }, - { - "id": "minecraft:decorated_pot", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRcKwAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uIAoUAQA=" - }, - { - "id": "minecraft:lodestone_compass" - }, - { - "id": "minecraft:wither_spawn_egg" - }, - { - "id": "minecraft:ender_dragon_spawn_egg" - }, - { - "id": "minecraft:debug_stick" - }, - { - "id": "minecraft:suspicious_stew" - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/creative_items.1_20_30.json b/core/src/main/resources/bedrock/creative_items.1_20_30.json deleted file mode 100644 index cce3f8a50..000000000 --- a/core/src/main/resources/bedrock/creative_items.1_20_30.json +++ /dev/null @@ -1,5787 +0,0 @@ -{ - "items": [ - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZE/NqzcKBgBzdGF0ZXMICQB3b29kX3R5cGUDAG9hawADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZHl/r2YKBgBzdGF0ZXMICQB3b29kX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZL6SoXYKBgBzdGF0ZXMICQB3b29kX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZKYD6L0KBgBzdGF0ZXMICQB3b29kX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZJ0zTHYKBgBzdGF0ZXMICQB3b29kX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:planks", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBsYW5rcwQJAG5hbWVfaGFzaA+7EGxL5oikAwoAbmV0d29ya19pZOf6hVkKBgBzdGF0ZXMICQB3b29kX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:mangrove_planks", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZEvnlCYKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cherry_planks", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWQTXpRoCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:bamboo_planks", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTi8ySSCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:bamboo_mosaic", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWQZ/p8xCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:crimson_planks", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkwtJDdQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:warped_planks", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWStTABvCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSE4JosCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBjb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWTUvV6XCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9jb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWT4opb2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBncmFuaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQAMQTVCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBkaW9yaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQIbDOcCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCABhbmRlc2l0ZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSZKhusCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBzYW5kc3RvbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWSp4zgCCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDQByZWRfc2FuZHN0b25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRbqVHTCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBzdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRr0ZT/CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9zdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRnLis3CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBQBicmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQNLzfSCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDABuZXRoZXJfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWQ5h0xwCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEAByZWRfbmV0aGVyX2JyaWNrCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWS9J0B2CgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBlbmRfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cobblestone_wall", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRPbkJeCgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCgBwcmlzbWFyaW5lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:blackstone_wall", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZMbeBBsKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:polished_blackstone_wall", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZAJLsz8KBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_wall", - "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZEbLV8cKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_wall", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWRCnPrFCgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:deepslate_tile_wall", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWTqw4s4CgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:polished_deepslate_wall", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkIvBYYwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:deepslate_brick_wall", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkwlrCGwoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:mud_brick_wall", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkH/1WZQoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:oak_fence", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZDvPEXcKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:spruce_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZD1QUEoKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:birch_fence", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkmCUV2QoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:jungle_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHz1VxkKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:acacia_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZNVGubwKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:dark_oak_fence", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lk2w+gEwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:mangrove_fence", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkKEcd0goGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cherry_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZPCBxAIKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:bamboo_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZJNXKFcKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:nether_brick_fence", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLnjLF4KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:crimson_fence", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWR3OH3OCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:warped_fence", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZCpaGC8KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:fence_gate", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWR+T9kTCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:spruce_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkEnw5egoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:birch_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQL77/BCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:jungle_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkA1zgtgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:acacia_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lkHg/kTgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:dark_oak_fence_gate", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWTwjOCeCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:mangrove_fence_gate", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWSfweCSCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cherry_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lk/9bTZQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:bamboo_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkzIpPywoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:crimson_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZDQzVbEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:warped_fence_gate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lkkf+/3QoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:normal_stone_stairs", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWQeH1ALCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_stairs", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZDcCv+MKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:mossy_cobblestone_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZFIfrhkKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:oak_stairs", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWQJjyzBCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:spruce_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWTv+is3CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:birch_stairs", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZFyPlHAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:jungle_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWR0z5d4CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:acacia_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWS7Jwz6CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:dark_oak_stairs", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZCmBYKAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:mangrove_stairs", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZChzUAsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cherry_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRQwq31CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:bamboo_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWTVPh42CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:bamboo_mosaic_stairs", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lk44PHjgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZDMyMgIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:mossy_stone_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZANTOsMKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:sandstone_stairs", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWSV/834CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:smooth_sandstone_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lksR+m8QoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_sandstone_stairs", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkLYVt3woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:smooth_red_sandstone_stairs", - "block_state_b64": "CgAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZMHNND8KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:granite_stairs", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkPkcB1goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:polished_granite_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkMmEm3AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:diorite_stairs", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lk6i6nBQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:polished_diorite_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkbt2ioAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:andesite_stairs", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZKhXEgUKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:polished_andesite_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZJTHrlEKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:brick_stairs", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZNeMh58KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:nether_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWQDiw5yCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_nether_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkx2IMtAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:end_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWTN7KFaCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:quartz_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWRmUTh7CgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:smooth_quartz_stairs", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkzsgQyQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:purpur_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWTT+rxiCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:prismarine_stairs", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkxTJfeAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:dark_prismarine_stairs", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWTVu7TCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:prismarine_bricks_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZGEFwLYKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:crimson_stairs", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lktXE00AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:warped_stairs", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWQ+E5VrCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:blackstone_stairs", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk5fWI5goGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:polished_blackstone_stairs", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lkGTf7sgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:polished_blackstone_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkgYeOdAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkeetf7woGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:exposed_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWSg73zdCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:weathered_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOnbRf4KBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:oxidized_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkmRjDnQoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:waxed_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkmYqoqAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQgCPROCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZHlwHVsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_stairs", - "block_state_b64": "CgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkYQXzzgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cobbled_deepslate_stairs", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZJUvOYIKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:deepslate_tile_stairs", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZJEOgIsKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:polished_deepslate_stairs", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWSRVPnYCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:deepslate_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ1qEDCCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:mud_brick_stairs", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWSm9N3MCgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:wooden_door" - }, - { - "id": "minecraft:spruce_door" - }, - { - "id": "minecraft:birch_door" - }, - { - "id": "minecraft:jungle_door" - }, - { - "id": "minecraft:acacia_door" - }, - { - "id": "minecraft:dark_oak_door" - }, - { - "id": "minecraft:mangrove_door" - }, - { - "id": "minecraft:cherry_door" - }, - { - "id": "minecraft:bamboo_door" - }, - { - "id": "minecraft:iron_door" - }, - { - "id": "minecraft:crimson_door" - }, - { - "id": "minecraft:warped_door" - }, - { - "id": "minecraft:trapdoor", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkyTAWkAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:spruce_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZPHy1K0KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:birch_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkeJWDfgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:jungle_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZEy2fJoKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:acacia_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZOHj8E8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:dark_oak_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lko5ZHTwoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:mangrove_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkkF/mxAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cherry_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZOA7eNgKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:bamboo_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZLvbPz8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:iron_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWTvSVl/CgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:crimson_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQLjMYVCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:warped_trapdoor", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZHKR/hYKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:iron_bars", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZN2LB5IKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:glass", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lk0hdLNwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:white_stained_glass", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWRndBrUCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:light_gray_stained_glass", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZEv2giYKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:gray_stained_glass", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZDomVrUKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:black_stained_glass", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWSV7doJCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:brown_stained_glass", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWRMzE/lCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_stained_glass", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lk283lWAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:orange_stained_glass", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lkW5CkhQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:yellow_stained_glass", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lkkdDyXQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:lime_stained_glass", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZDxX85UKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:green_stained_glass", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWTlDhnECgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cyan_stained_glass", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZOL1lHsKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:light_blue_stained_glass", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZNbwulIKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:blue_stained_glass", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZENsjFwKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:purple_stained_glass", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkD98ZxgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:magenta_stained_glass", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZG+iFRoKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:pink_stained_glass", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZKdEricKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:tinted_glass", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZGSvWX8KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:glass_pane", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWRGwixuCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:white_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZBEr/DYKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:light_gray_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lk9dp5VgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:gray_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkmrGO5woGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:black_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZDv++oQKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:brown_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZMz9L0wKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:red_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQBjCTmCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:orange_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSt/7a5CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:yellow_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWTXRAS7CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:lime_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lkYJDnggoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:green_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZHOnixoKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cyan_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkUqFUeQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:light_blue_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkFuy4MQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:blue_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lk1eBLUAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:purple_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSNsdK5CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:magenta_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lkVbOR7AoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:pink_stained_glass_pane", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkIR92xwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:ladder", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZCgvzlsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:scaffolding", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkD13mlAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWTkNl0JCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQwAc21vb3RoX3N0b25lAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkQJoxlgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNAUAc3RvbmUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWRHh04KCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQsAY29iYmxlc3RvbmUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkVRZB+woGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhEAbW9zc3lfY29iYmxlc3RvbmUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkBaobgAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUDAG9hawADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkhz9TeQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lk3HkwowoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkDIBqVQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkL5hFYAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:wooden_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkKRUHSQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:mangrove_slab", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQx6U1yCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cherry_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lk2VVsZQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:bamboo_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkVC+0twoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:bamboo_mosaic_slab", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZOLZHFMKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWQSiInOCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQsAc3RvbmVfYnJpY2sAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkoF89tgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAbW9zc3lfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSkoAE4CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQkAc2FuZHN0b25lAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkWfF7pgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0AY3V0X3NhbmRzdG9uZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkbKRChAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAc21vb3RoX3NhbmRzdG9uZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkBlrvqAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg0AcmVkX3NhbmRzdG9uZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkRWFXuwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAY3V0X3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkom8neQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxQAc21vb3RoX3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkd1ZaWgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZ3Jhbml0ZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkISH4iwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZ3Jhbml0ZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkqxEDMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZGlvcml0ZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkSYs86QoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZGlvcml0ZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkq6BU6goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwgAYW5kZXNpdGUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkTSXY8AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxEAcG9saXNoZWRfYW5kZXNpdGUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWQiYHKTCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQUAYnJpY2sAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWTk/0LfCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQwAbmV0aGVyX2JyaWNrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk/hXQ7AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcmVkX25ldGhlcl9icmljawADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab3", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkYJNxrwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMw8AZW5kX3N0b25lX2JyaWNrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_block_slab", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWRlj0/sCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQYAcXVhcnR6AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_block_slab4", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkMae+2goGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0Ac21vb3RoX3F1YXJ0egADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk+kMHGAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMgYAcHVycHVyAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkKOSOMAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9yb3VnaAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lk8igLCQoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg8AcHJpc21hcmluZV9kYXJrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_block_slab2", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkSFbyEwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9icmljawADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:crimson_slab", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZAxRUWAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:warped_slab", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lk1yq11AoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:blackstone_slab", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZGy1DjwKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:polished_blackstone_slab", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZJj2bXIKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:polished_blackstone_brick_slab", - "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZOyWX94KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZOTm2nsKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:exposed_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkrUlZLwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:weathered_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWQgnaDiCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZMzFSRgKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:waxed_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZFRBvDAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkHTGcTgoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWSgJR+XCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper_slab", - "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZIxsnFYKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cobbled_deepslate_slab", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTYAoX5CgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:polished_deepslate_slab", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lkuFYMAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:deepslate_tile_slab", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWQwlbFCCgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:deepslate_brick_slab", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lkWMoragoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:mud_brick_slab", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkl4nnMwoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:brick_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lkqeGWRgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:chiseled_nether_bricks", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWS8TJ+TCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cracked_nether_bricks", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZIUSejwKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:quartz_bricks", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWSc5xCLCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWQ5kni1CgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAZGVmYXVsdAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWTDw813CgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQUAbW9zc3kAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWSTvQGECgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAY3JhY2tlZAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stonebrick", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWQIM0OwCgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQgAY2hpc2VsZWQAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:end_bricks", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWQ/vDihCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWSH021WCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBgBicmlja3MAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:polished_blackstone_bricks", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkUw9b3woGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cracked_polished_blackstone_bricks", - "block_state_b64": "CgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWQ3UlRYCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:gilded_blackstone", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lktL8gUwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:chiseled_polished_blackstone", - "block_state_b64": "CgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWR2NJX2CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:deepslate_tiles", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZI/G/xYKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cracked_deepslate_tiles", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkGwY6OgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:deepslate_bricks", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWSH4HDPCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cracked_deepslate_bricks", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZO9GPBQKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:chiseled_deepslate", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZEqmI0EKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cobblestone", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkLm7RZwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:mossy_cobblestone", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lk/pYs1AoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cobbled_deepslate", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkNwzZ+AoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:smooth_stone", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZLkZICEKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZB2wApMKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUHAGRlZmF1bHQAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZB7E+eQKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGULAGhlaXJvZ2x5cGhzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZFQnDaEKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUDAGN1dAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sandstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZPO4A3IKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUGAHNtb290aAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWRhNYiFCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTqXJr1CgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlCwBoZWlyb2dseXBocwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTQRGkFCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlAwBjdXQAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:red_sandstone", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWTvAHWDCgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBgBzbW9vdGgAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coal_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWRo+sR+CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:dried_kelp_block", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWQQCCrvCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:gold_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWTDJGBcCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:iron_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWRf7AbICgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:copper_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:exposed_copper", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:weathered_copper", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:oxidized_copper", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:waxed_copper", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:waxed_exposed_copper", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:waxed_weathered_copper", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:waxed_oxidized_copper", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cut_copper", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:exposed_cut_copper", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZMQhr0QKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:weathered_cut_copper", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lk/0cYugoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:oxidized_cut_copper", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWQPdce7CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:waxed_cut_copper", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWQvuxx9CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:waxed_exposed_cut_copper", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZHy5HkcKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:waxed_weathered_cut_copper", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lkDyEDVQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:waxed_oxidized_cut_copper", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:emerald_block", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:diamond_block", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWQQeQZXCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:lapis_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lktVy0BAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:raw_iron_block", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lknms1QAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:raw_copper_block", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWS1vGo/CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:raw_gold_block", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkLiQ5gQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZEupC1AKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZM97+l0KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZCbTfssKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQgAY2hpc2VsZWQICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:quartz_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZJss8V0KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQYAc21vb3RoCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWRFIsoGCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:prismarine", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWTDNWOvCgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBABkYXJrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:slime", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkfgfVzAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:honey_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lko+dyWgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:honeycomb_block", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKys4n4KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:hay_block", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZKuQSloKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:bone_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWTWGacQCgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:nether_brick", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZMkmzloKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:red_nether_brick", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWRpdF0YCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:netherite_block", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZIz0mq0KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:lodestone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZEfgB4wKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:white_wool", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWSO8paQCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:light_gray_wool", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZIqZCYEKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:gray_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZFUs+HgKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:black_wool", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRUbORcCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:brown_wool", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWRjT9j8CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_wool", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lktn9lcAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:orange_wool", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lk+rqywwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:yellow_wool", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkkKBhXAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:lime_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZG9b32kKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:green_wool", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWSssprwCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cyan_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZK0hAbgKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:light_blue_wool", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZL2oEugKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:blue_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZPaLdFQKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:purple_wool", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lklqASNQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:magenta_wool", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZI4UoDQKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:pink_wool", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZOZRO6oKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:white_carpet", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZEahDFcKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:light_gray_carpet", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lkQoAeUAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:gray_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkETF4WwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:black_carpet", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZFjmXtIKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:brown_carpet", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZHPjFuoKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:red_carpet", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQuhI/KCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:orange_carpet", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWSyKV9OCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:yellow_carpet", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWT8nq+ECgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:lime_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lkT+DS4woGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:green_carpet", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZBgwAvAKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cyan_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkKVppLgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:light_blue_carpet", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lkjdeMiwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:blue_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkAovdPQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:purple_carpet", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWTqJqhjCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:magenta_carpet", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lk+tqsGAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:pink_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkrnBYDwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:white_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZJPZY8AKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:light_gray_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkh8jVIwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:gray_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkSsqC1woGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:black_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZMWTC8EKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:brown_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZEDHKqwKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:red_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSvcmwYCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:orange_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTHph0FCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:yellow_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWQZAI39CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:lime_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk2O8X0AoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:green_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZA0VfBMKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cyan_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkmkn6uwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:light_blue_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkOmVSbgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:blue_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkS3b3RQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:purple_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWQXimEjCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:magenta_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkf9mxQwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:pink_concrete_powder", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lku2MivwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:white_concrete", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lk3MAYQAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:light_gray_concrete", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWQISs02CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:gray_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQj8RHwCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:black_concrete", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lk2uiVDQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:brown_concrete", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkYf+xDQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_concrete", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZKwyx58KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:orange_concrete", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZMDQNz8KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:yellow_concrete", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZMarutwKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:lime_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWTd47aoCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:green_concrete", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkmhZWUgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cyan_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWQbi5b8CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:light_blue_concrete", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRL/GbSCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:blue_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWRMvFXNCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:purple_concrete", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZCyKA5gKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:magenta_concrete", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWTc6ZOdCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:pink_concrete", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSszGgrCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:clay", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRmsb8nCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:hardened_clay", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRBCOrrCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:white_terracotta", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWSimKw+CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:light_gray_terracotta", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZH5qgOcKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:gray_terracotta", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZM1QDV0KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:black_terracotta", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWRE3Ru/CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:brown_terracotta", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWQ/i0iNCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_terracotta", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lk8tTF8QoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:orange_terracotta", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lklmqmkAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:yellow_terracotta", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkaM/orAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:lime_terracotta", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZJt0XsgKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:green_terracotta", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWQ8kGdHCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cyan_terracotta", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZIWPCzoKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:light_blue_terracotta", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZFHK1UsKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:blue_terracotta", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZF5mVZIKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:purple_terracotta", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkhtRDlwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:magenta_terracotta", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZN5SoakKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:pink_terracotta", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZDJWe4YKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:white_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkIlj9AAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:silver_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZPnxtJEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:gray_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWQVU8eFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:black_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lk2Icb9AoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:brown_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkJy0jwgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZMYBJSEKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:orange_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZN6+7TUKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:yellow_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZKRHXeoKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:lime_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSP7qQWCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:green_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkoF11kgoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:cyan_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWT9buMtCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:light_blue_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWS5CszFCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:blue_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWR+e22CCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:purple_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZLKbSE4KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:magenta_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWQKf9UvCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:pink_glazed_terracotta", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTKzav2CgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZLD8ox4KBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:purpur_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZPSAFFsKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:packed_mud", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTUb6LyCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:mud_bricks", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWSkBjaDCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:nether_wart_block", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkh3apIgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:warped_wart_block", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkMpKAbAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:shroomlight", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkLG2JiwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:crimson_nylium", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkuWpRDgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:warped_nylium", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWSu/kekCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:netherrack", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTAiTOACgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:basalt", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBPNSV4KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:polished_basalt", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZF+/mHwKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:smooth_basalt", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWTkb/oVCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:soul_soil", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZKc63SMKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWQmkQtoCgYAc3RhdGVzCAkAZGlydF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:dirt", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWQId9pLCgYAc3RhdGVzCAkAZGlydF90eXBlBgBjb2Fyc2UAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:farmland", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkX618FQoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:grass", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmdyYXNzBAkAbmFtZV9oYXNosppASPWFlsUDCgBuZXR3b3JrX2lkhLLQkQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:grass_path", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWT7CcdzCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:podzol", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZPPS/GUKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:mycelium", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkLNPxXQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:mud", - "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZPIUlUkKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lky8FPmgoGAHN0YXRlcwgKAHN0b25lX3R5cGUFAHN0b25lAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:iron_ore", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lk3loneQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:gold_ore", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkNhvMfwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:diamond_ore", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lk/dChVAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:lapis_ore", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZMg+qK4KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:redstone_ore", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZKDYvQoKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coal_ore", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lk+R/aKAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:copper_ore", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQtIuCnCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:emerald_ore", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lknbkqCgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:quartz_ore", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWSzN7nzCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:nether_gold_ore", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZNI9pDgKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:ancient_debris", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkrSNjEAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:deepslate_iron_ore", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZFA0bz4KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:deepslate_gold_ore", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZHQTfBUKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:deepslate_diamond_ore", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZHP6VzAKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:deepslate_lapis_ore", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWRKINzICgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:deepslate_redstone_ore", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWReBdYRCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:deepslate_emerald_ore", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZNeie6sKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:deepslate_coal_ore", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZD9TiygKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:deepslate_copper_ore", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkP23rgQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:gravel", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBpfI1sKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkbtgs0goGAHN0YXRlcwgKAHN0b25lX3R5cGUHAGdyYW5pdGUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk3sDePAoGAHN0YXRlcwgKAHN0b25lX3R5cGUHAGRpb3JpdGUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkYG+0YwoGAHN0YXRlcwgKAHN0b25lX3R5cGUIAGFuZGVzaXRlAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:blackstone", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWSrUryHCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:deepslate", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZOJoQjsKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkREbyhwoGAHN0YXRlcwgKAHN0b25lX3R5cGUOAGdyYW5pdGVfc21vb3RoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk/EZ3UwoGAHN0YXRlcwgKAHN0b25lX3R5cGUOAGRpb3JpdGVfc21vb3RoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lkmjeVIwoGAHN0YXRlcwgKAHN0b25lX3R5cGUPAGFuZGVzaXRlX3Ntb290aAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:polished_blackstone", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWR/Ho6oCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:polished_deepslate", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZCPeQsEKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:sand", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWTekU/mCgYAc3RhdGVzCAkAc2FuZF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:sand", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWSTgcqmCgYAc3RhdGVzCAkAc2FuZF90eXBlAwByZWQAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cactus", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZDeCERAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:oak_log", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWQjfjoxCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stripped_oak_log", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWSYKjdrCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:spruce_log", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWRlFD8eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stripped_spruce_log", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWRQcEC3CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:birch_log", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZBKN3VQKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stripped_birch_log", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZN0IONIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:jungle_log", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWQaziU/CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stripped_jungle_log", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWQvls0eCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:acacia_log", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWRxEqe0CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stripped_acacia_log", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRg3IdRCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:dark_oak_log", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZPMM7LYKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stripped_dark_oak_log", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZDIzenIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:mangrove_log", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZG6DuYkKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stripped_mangrove_log", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZPtRn7UKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cherry_log", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWS2sdXECgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stripped_cherry_log", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWRjzoglCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:crimson_stem", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZKvzID0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stripped_crimson_stem", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZHrIqjIKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:warped_stem", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkerWyMwoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stripped_warped_stem", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIQ9vBAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSYGFlqCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlAwBvYWsAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSxnUzvCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlAwBvYWsAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWToyw4RCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBzcHJ1Y2UAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWTL0a3ZCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBzcHJ1Y2UAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQV99vJCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBQBiaXJjaAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQYDJk1CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBQBiaXJjaAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSfH48gCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBqdW5nbGUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQ44auiCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBqdW5nbGUAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSogpPYCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBhY2FjaWEAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWSD7hT1CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBhY2FjaWEAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQagb3gCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlCABkYXJrX29hawADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:wood", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQdnWU+CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlCABkYXJrX29hawADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:mangrove_wood", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWTok1JCCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stripped_mangrove_wood", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWQLAX88CgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cherry_wood", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkEALMfAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AQwAc3RyaXBwZWRfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stripped_cherry_wood", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lkg5aVtQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:crimson_hyphae", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk+Tm5rQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stripped_crimson_hyphae", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkZAlUbgoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:warped_hyphae", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRU2AIBCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:stripped_warped_hyphae", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSbrOPDCgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:bamboo_block", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZCJAwn0KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:stripped_bamboo_block", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZKuRbNEKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:leaves", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZOmqtzMKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlAwBvYWsBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:leaves", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZFMVNEQKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBgBzcHJ1Y2UBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:leaves", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZKCZEm8KBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBQBiaXJjaAEOAHBlcnNpc3RlbnRfYml0AAEKAHVwZGF0ZV9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:leaves", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZABprGgKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBgBqdW5nbGUBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:leaves2", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxlYXZlczIECQBuYW1lX2hhc2gy/bgrncY1ZAMKAG5ldHdvcmtfaWSFh3olCgYAc3RhdGVzCA0AbmV3X2xlYWZfdHlwZQYAYWNhY2lhAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:leaves2", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxlYXZlczIECQBuYW1lX2hhc2gy/bgrncY1ZAMKAG5ldHdvcmtfaWTvEAyeCgYAc3RhdGVzCA0AbmV3X2xlYWZfdHlwZQgAZGFya19vYWsBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:mangrove_leaves", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZPQxCZ8KBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cherry_leaves", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWR8bPpwCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:azalea_leaves", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWTNB/9ECgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:azalea_leaves_flowered", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWQ7W4PyCgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQmoOEvCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUDAG9hawADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQO8pAmCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWQDHhokCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWTdQrcyCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWRCDffNCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sapling", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWR0BRzPCgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:mangrove_propagule", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZAIpvpYKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cherry_sapling", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkypakXQoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:bee_nest", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkiXWLEAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wheat_seeds" - }, - { - "id": "minecraft:pumpkin_seeds" - }, - { - "id": "minecraft:melon_seeds" - }, - { - "id": "minecraft:beetroot_seeds" - }, - { - "id": "minecraft:torchflower_seeds" - }, - { - "id": "minecraft:pitcher_pod" - }, - { - "id": "minecraft:wheat" - }, - { - "id": "minecraft:beetroot" - }, - { - "id": "minecraft:potato" - }, - { - "id": "minecraft:poisonous_potato" - }, - { - "id": "minecraft:carrot" - }, - { - "id": "minecraft:golden_carrot" - }, - { - "id": "minecraft:apple" - }, - { - "id": "minecraft:golden_apple" - }, - { - "id": "minecraft:enchanted_golden_apple" - }, - { - "id": "minecraft:melon_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkC9rqygoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:melon_slice" - }, - { - "id": "minecraft:glistering_melon_slice" - }, - { - "id": "minecraft:sweet_berries" - }, - { - "id": "minecraft:glow_berries" - }, - { - "id": "minecraft:pumpkin", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWRFGA+xCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:carved_pumpkin", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkXNNn5QoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:lit_pumpkin", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lki8sU4AoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:honeycomb" - }, - { - "id": "minecraft:tallgrass", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZOh33DMKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAGZlcm4AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZMx1sfgKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAZmVybgEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:tallgrass", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZErptfIKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAHRhbGwAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZAbadmIKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQUAZ3Jhc3MBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:nether_sprouts" - }, - { - "id": "minecraft:fire_coral", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWS9vF0UCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:brain_coral", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkrjAuhgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:bubble_coral", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZImIWy0KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:tube_coral", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWRTfND5CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:horn_coral", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR+GGp8CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:dead_fire_coral", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZNMa7V4KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:dead_brain_coral", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQkKzeiCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:dead_bubble_coral", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lka6w9DAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:dead_tube_coral", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZO3Z0ygKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:dead_horn_coral", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZBAN+eYKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZOg7iS4KBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgMAcmVkAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZIDj8HMKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgQAcGluawMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZLCJP0kKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgYAcHVycGxlAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZFz2ly4KBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgQAYmx1ZQMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:coral_fan", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZE4TgnYKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgYAeWVsbG93AxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkdhLQzwoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkSi6srQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkGiGSzAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkmvZKOgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_fan_dead", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lknLw+4QoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:crimson_roots", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWRLh5DXCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:warped_roots", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZNLgDnAKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:yellow_flower", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19mbG93ZXIECQBuYW1lX2hhc2jWbU1pF0OUGAMKAG5ldHdvcmtfaWQgO3hpCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWSqsqQGCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUFAHBvcHB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWTqDajjCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUGAG9yY2hpZAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWT5CjveCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUGAGFsbGl1bQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWTORIBJCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUJAGhvdXN0b25pYQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWTuNhmYCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUJAHR1bGlwX3JlZAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWT0O4nfCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUMAHR1bGlwX29yYW5nZQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWTqkthyCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGULAHR1bGlwX3doaXRlAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRMbBA7CgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUKAHR1bGlwX3BpbmsAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRexMAuCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUFAG94ZXllAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWQgs7BECgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUKAGNvcm5mbG93ZXIAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:red_flower", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWRvDuNbCgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUSAGxpbHlfb2ZfdGhlX3ZhbGxleQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZOemRt4KBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQkAc3VuZmxvd2VyAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZOFugoEKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAc3lyaW5nYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZN4O+/gKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAcm9zZQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:double_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZI3w4GMKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAcGFlb25pYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:pitcher_plant", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWRnY76VCgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:pink_petals", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkNWneGgoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:wither_rose", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkATXLPwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:torchflower", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkI34O+AoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:white_dye" - }, - { - "id": "minecraft:light_gray_dye" - }, - { - "id": "minecraft:gray_dye" - }, - { - "id": "minecraft:black_dye" - }, - { - "id": "minecraft:brown_dye" - }, - { - "id": "minecraft:red_dye" - }, - { - "id": "minecraft:orange_dye" - }, - { - "id": "minecraft:yellow_dye" - }, - { - "id": "minecraft:lime_dye" - }, - { - "id": "minecraft:green_dye" - }, - { - "id": "minecraft:cyan_dye" - }, - { - "id": "minecraft:light_blue_dye" - }, - { - "id": "minecraft:blue_dye" - }, - { - "id": "minecraft:purple_dye" - }, - { - "id": "minecraft:magenta_dye" - }, - { - "id": "minecraft:pink_dye" - }, - { - "id": "minecraft:ink_sac" - }, - { - "id": "minecraft:glow_ink_sac" - }, - { - "id": "minecraft:cocoa_beans" - }, - { - "id": "minecraft:lapis_lazuli" - }, - { - "id": "minecraft:bone_meal" - }, - { - "id": "minecraft:vine", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnZpbmUECQBuYW1lX2hhc2j0Sj8/XeXOLAMKAG5ldHdvcmtfaWSUkDtbCgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:weeping_vines", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWQ8NHSJCgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:twisting_vines", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lk5kYVIQoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:waterlily", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZOOerp8KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:seagrass", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkd3lhEAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:kelp" - }, - { - "id": "minecraft:deadbush", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkVfnl+goGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:bamboo", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZIZv1nYKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:snow", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWQ0zCeHCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:ice", - "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZOUMaQYKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:packed_ice", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWTr/ooaCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:blue_ice", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lkxfsA8goGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:snow_layer", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWRCrIPcCgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:pointed_dripstone", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkbWrtYgoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:dripstone_block", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZMZi2kwKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:moss_carpet", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lkaGG3QwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:moss_block", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWT3JSbfCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:dirt_with_roots", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNCkwzoKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:hanging_roots", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRU4c2vCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:mangrove_roots", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lklA0AHgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:muddy_mangrove_roots", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkH0Oc4woGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:big_dripleaf", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZMETsb8KBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:small_dripleaf_block", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lkozbVPwoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:spore_blossom", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWSbbbgcCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:azalea", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZO/XZtQKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:flowering_azalea", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWQ3ij0VCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:glow_lichen", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkCh8lSAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:amethyst_block", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lk8HtpzgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:budding_amethyst", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWTQYqfACgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:amethyst_cluster", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWSCPMPGCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:large_amethyst_bud", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZKkQxOcKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:medium_amethyst_bud", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWSYiP4gCgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:small_amethyst_bud", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZGWzxrQKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:tuff", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:calcite", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:chicken" - }, - { - "id": "minecraft:porkchop" - }, - { - "id": "minecraft:beef" - }, - { - "id": "minecraft:mutton" - }, - { - "id": "minecraft:rabbit" - }, - { - "id": "minecraft:cod" - }, - { - "id": "minecraft:salmon" - }, - { - "id": "minecraft:tropical_fish" - }, - { - "id": "minecraft:pufferfish" - }, - { - "id": "minecraft:brown_mushroom", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX211c2hyb29tBAkAbmFtZV9oYXNonYw/FO78WDoDCgBuZXR3b3JrX2lkLh1OXAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_mushroom", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCvWPYkKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:crimson_fungus", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lkD2NN0QoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:warped_fungus", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTkwS+rCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkdOMhDAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:red_mushroom_block", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZM+AyboKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkbdt3CAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw8AAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:brown_mushroom_block", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkSrMl9goGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cwAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:egg" - }, - { - "id": "minecraft:sugar_cane" - }, - { - "id": "minecraft:sugar" - }, - { - "id": "minecraft:rotten_flesh" - }, - { - "id": "minecraft:bone" - }, - { - "id": "minecraft:web", - "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZApt+jgKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:spider_eye" - }, - { - "id": "minecraft:mob_spawner", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkM1wTmgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkqXH7RgoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUFAHN0b25lAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkeIBb6QoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAGNvYmJsZXN0b25lAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkDZ2cFQoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAHN0b25lX2JyaWNrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkOR/cTAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGURAG1vc3N5X3N0b25lX2JyaWNrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkqdwlHAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUTAGNyYWNrZWRfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:monster_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkFqqPggoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUUAGNoaXNlbGVkX3N0b25lX2JyaWNrAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:infested_deepslate", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZDa/624KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:dragon_egg", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWTgO1yRCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:turtle_egg", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWSIRNUhCgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sniffer_egg", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lk7yb/2QoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:frog_spawn", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRFzJudCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:pearlescent_froglight", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZJqYakAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:verdant_froglight", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lkDIVnsQoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:ochre_froglight", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZO2TD50KBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:chicken_spawn_egg" - }, - { - "id": "minecraft:bee_spawn_egg" - }, - { - "id": "minecraft:cow_spawn_egg" - }, - { - "id": "minecraft:pig_spawn_egg" - }, - { - "id": "minecraft:sheep_spawn_egg" - }, - { - "id": "minecraft:wolf_spawn_egg" - }, - { - "id": "minecraft:polar_bear_spawn_egg" - }, - { - "id": "minecraft:ocelot_spawn_egg" - }, - { - "id": "minecraft:cat_spawn_egg" - }, - { - "id": "minecraft:mooshroom_spawn_egg" - }, - { - "id": "minecraft:bat_spawn_egg" - }, - { - "id": "minecraft:parrot_spawn_egg" - }, - { - "id": "minecraft:rabbit_spawn_egg" - }, - { - "id": "minecraft:llama_spawn_egg" - }, - { - "id": "minecraft:horse_spawn_egg" - }, - { - "id": "minecraft:donkey_spawn_egg" - }, - { - "id": "minecraft:mule_spawn_egg" - }, - { - "id": "minecraft:skeleton_horse_spawn_egg" - }, - { - "id": "minecraft:zombie_horse_spawn_egg" - }, - { - "id": "minecraft:tropical_fish_spawn_egg" - }, - { - "id": "minecraft:cod_spawn_egg" - }, - { - "id": "minecraft:pufferfish_spawn_egg" - }, - { - "id": "minecraft:salmon_spawn_egg" - }, - { - "id": "minecraft:dolphin_spawn_egg" - }, - { - "id": "minecraft:turtle_spawn_egg" - }, - { - "id": "minecraft:panda_spawn_egg" - }, - { - "id": "minecraft:fox_spawn_egg" - }, - { - "id": "minecraft:creeper_spawn_egg" - }, - { - "id": "minecraft:enderman_spawn_egg" - }, - { - "id": "minecraft:silverfish_spawn_egg" - }, - { - "id": "minecraft:skeleton_spawn_egg" - }, - { - "id": "minecraft:wither_skeleton_spawn_egg" - }, - { - "id": "minecraft:stray_spawn_egg" - }, - { - "id": "minecraft:slime_spawn_egg" - }, - { - "id": "minecraft:spider_spawn_egg" - }, - { - "id": "minecraft:zombie_spawn_egg" - }, - { - "id": "minecraft:zombie_pigman_spawn_egg" - }, - { - "id": "minecraft:husk_spawn_egg" - }, - { - "id": "minecraft:drowned_spawn_egg" - }, - { - "id": "minecraft:squid_spawn_egg" - }, - { - "id": "minecraft:glow_squid_spawn_egg" - }, - { - "id": "minecraft:cave_spider_spawn_egg" - }, - { - "id": "minecraft:witch_spawn_egg" - }, - { - "id": "minecraft:guardian_spawn_egg" - }, - { - "id": "minecraft:elder_guardian_spawn_egg" - }, - { - "id": "minecraft:endermite_spawn_egg" - }, - { - "id": "minecraft:magma_cube_spawn_egg" - }, - { - "id": "minecraft:strider_spawn_egg" - }, - { - "id": "minecraft:hoglin_spawn_egg" - }, - { - "id": "minecraft:piglin_spawn_egg" - }, - { - "id": "minecraft:zoglin_spawn_egg" - }, - { - "id": "minecraft:piglin_brute_spawn_egg" - }, - { - "id": "minecraft:goat_spawn_egg" - }, - { - "id": "minecraft:axolotl_spawn_egg" - }, - { - "id": "minecraft:warden_spawn_egg" - }, - { - "id": "minecraft:allay_spawn_egg" - }, - { - "id": "minecraft:frog_spawn_egg" - }, - { - "id": "minecraft:tadpole_spawn_egg" - }, - { - "id": "minecraft:trader_llama_spawn_egg" - }, - { - "id": "minecraft:camel_spawn_egg" - }, - { - "id": "minecraft:ghast_spawn_egg" - }, - { - "id": "minecraft:blaze_spawn_egg" - }, - { - "id": "minecraft:shulker_spawn_egg" - }, - { - "id": "minecraft:vindicator_spawn_egg" - }, - { - "id": "minecraft:evoker_spawn_egg" - }, - { - "id": "minecraft:vex_spawn_egg" - }, - { - "id": "minecraft:villager_spawn_egg" - }, - { - "id": "minecraft:wandering_trader_spawn_egg" - }, - { - "id": "minecraft:zombie_villager_spawn_egg" - }, - { - "id": "minecraft:phantom_spawn_egg" - }, - { - "id": "minecraft:pillager_spawn_egg" - }, - { - "id": "minecraft:ravager_spawn_egg" - }, - { - "id": "minecraft:iron_golem_spawn_egg" - }, - { - "id": "minecraft:snow_golem_spawn_egg" - }, - { - "id": "minecraft:sniffer_spawn_egg" - }, - { - "id": "minecraft:obsidian", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lkuqnPpQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:crying_obsidian", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZCjbPV4KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:bedrock", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWT7fKz1CgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:soul_sand", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZBQSHrMKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:magma", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lkyfWAZgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:nether_wart" - }, - { - "id": "minecraft:end_stone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZFeFQ7UKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:chorus_flower", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWRnd1ZWCgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:chorus_plant", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZA3uVqMKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:chorus_fruit" - }, - { - "id": "minecraft:popped_chorus_fruit" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZF01rO0KBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAZHJ5AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:sponge", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZPiOc4QKBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAd2V0AAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkGnlaAwoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkSnHuagoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkmkHyegoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkdpUDxgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkYNWvYgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkZSxBQgoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lklSTVqQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lk5fTYuQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAEAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkwUjqBAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAEAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:coral_block", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkq4iWoQoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAEAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:sculk", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lkyqUPPgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sculk_vein", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWSUfn1XCgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:sculk_catalyst", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkMJ2n/woGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sculk_shrieker", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkxapoNAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sculk_sensor", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZLj2WPcKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:calibrated_sculk_sensor", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkwOx3QQoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:reinforced_deepslate", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkHIt+aQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:leather_helmet" - }, - { - "id": "minecraft:chainmail_helmet" - }, - { - "id": "minecraft:iron_helmet" - }, - { - "id": "minecraft:golden_helmet" - }, - { - "id": "minecraft:diamond_helmet" - }, - { - "id": "minecraft:netherite_helmet" - }, - { - "id": "minecraft:leather_chestplate" - }, - { - "id": "minecraft:chainmail_chestplate" - }, - { - "id": "minecraft:iron_chestplate" - }, - { - "id": "minecraft:golden_chestplate" - }, - { - "id": "minecraft:diamond_chestplate" - }, - { - "id": "minecraft:netherite_chestplate" - }, - { - "id": "minecraft:leather_leggings" - }, - { - "id": "minecraft:chainmail_leggings" - }, - { - "id": "minecraft:iron_leggings" - }, - { - "id": "minecraft:golden_leggings" - }, - { - "id": "minecraft:diamond_leggings" - }, - { - "id": "minecraft:netherite_leggings" - }, - { - "id": "minecraft:leather_boots" - }, - { - "id": "minecraft:chainmail_boots" - }, - { - "id": "minecraft:iron_boots" - }, - { - "id": "minecraft:golden_boots" - }, - { - "id": "minecraft:diamond_boots" - }, - { - "id": "minecraft:netherite_boots" - }, - { - "id": "minecraft:wooden_sword" - }, - { - "id": "minecraft:stone_sword" - }, - { - "id": "minecraft:iron_sword" - }, - { - "id": "minecraft:golden_sword" - }, - { - "id": "minecraft:diamond_sword" - }, - { - "id": "minecraft:netherite_sword" - }, - { - "id": "minecraft:wooden_axe" - }, - { - "id": "minecraft:stone_axe" - }, - { - "id": "minecraft:iron_axe" - }, - { - "id": "minecraft:golden_axe" - }, - { - "id": "minecraft:diamond_axe" - }, - { - "id": "minecraft:netherite_axe" - }, - { - "id": "minecraft:wooden_pickaxe" - }, - { - "id": "minecraft:stone_pickaxe" - }, - { - "id": "minecraft:iron_pickaxe" - }, - { - "id": "minecraft:golden_pickaxe" - }, - { - "id": "minecraft:diamond_pickaxe" - }, - { - "id": "minecraft:netherite_pickaxe" - }, - { - "id": "minecraft:wooden_shovel" - }, - { - "id": "minecraft:stone_shovel" - }, - { - "id": "minecraft:iron_shovel" - }, - { - "id": "minecraft:golden_shovel" - }, - { - "id": "minecraft:diamond_shovel" - }, - { - "id": "minecraft:netherite_shovel" - }, - { - "id": "minecraft:wooden_hoe" - }, - { - "id": "minecraft:stone_hoe" - }, - { - "id": "minecraft:iron_hoe" - }, - { - "id": "minecraft:golden_hoe" - }, - { - "id": "minecraft:diamond_hoe" - }, - { - "id": "minecraft:netherite_hoe" - }, - { - "id": "minecraft:bow" - }, - { - "id": "minecraft:crossbow" - }, - { - "id": "minecraft:arrow" - }, - { - "id": "minecraft:arrow", - "damage": 6 - }, - { - "id": "minecraft:arrow", - "damage": 7 - }, - { - "id": "minecraft:arrow", - "damage": 8 - }, - { - "id": "minecraft:arrow", - "damage": 9 - }, - { - "id": "minecraft:arrow", - "damage": 10 - }, - { - "id": "minecraft:arrow", - "damage": 11 - }, - { - "id": "minecraft:arrow", - "damage": 12 - }, - { - "id": "minecraft:arrow", - "damage": 13 - }, - { - "id": "minecraft:arrow", - "damage": 14 - }, - { - "id": "minecraft:arrow", - "damage": 15 - }, - { - "id": "minecraft:arrow", - "damage": 16 - }, - { - "id": "minecraft:arrow", - "damage": 17 - }, - { - "id": "minecraft:arrow", - "damage": 18 - }, - { - "id": "minecraft:arrow", - "damage": 19 - }, - { - "id": "minecraft:arrow", - "damage": 20 - }, - { - "id": "minecraft:arrow", - "damage": 21 - }, - { - "id": "minecraft:arrow", - "damage": 22 - }, - { - "id": "minecraft:arrow", - "damage": 23 - }, - { - "id": "minecraft:arrow", - "damage": 24 - }, - { - "id": "minecraft:arrow", - "damage": 25 - }, - { - "id": "minecraft:arrow", - "damage": 26 - }, - { - "id": "minecraft:arrow", - "damage": 27 - }, - { - "id": "minecraft:arrow", - "damage": 28 - }, - { - "id": "minecraft:arrow", - "damage": 29 - }, - { - "id": "minecraft:arrow", - "damage": 30 - }, - { - "id": "minecraft:arrow", - "damage": 31 - }, - { - "id": "minecraft:arrow", - "damage": 32 - }, - { - "id": "minecraft:arrow", - "damage": 33 - }, - { - "id": "minecraft:arrow", - "damage": 34 - }, - { - "id": "minecraft:arrow", - "damage": 35 - }, - { - "id": "minecraft:arrow", - "damage": 36 - }, - { - "id": "minecraft:arrow", - "damage": 37 - }, - { - "id": "minecraft:arrow", - "damage": 38 - }, - { - "id": "minecraft:arrow", - "damage": 39 - }, - { - "id": "minecraft:arrow", - "damage": 40 - }, - { - "id": "minecraft:arrow", - "damage": 41 - }, - { - "id": "minecraft:arrow", - "damage": 42 - }, - { - "id": "minecraft:arrow", - "damage": 43 - }, - { - "id": "minecraft:shield" - }, - { - "id": "minecraft:cooked_chicken" - }, - { - "id": "minecraft:cooked_porkchop" - }, - { - "id": "minecraft:cooked_beef" - }, - { - "id": "minecraft:cooked_mutton" - }, - { - "id": "minecraft:cooked_rabbit" - }, - { - "id": "minecraft:cooked_cod" - }, - { - "id": "minecraft:cooked_salmon" - }, - { - "id": "minecraft:bread" - }, - { - "id": "minecraft:mushroom_stew" - }, - { - "id": "minecraft:beetroot_soup" - }, - { - "id": "minecraft:rabbit_stew" - }, - { - "id": "minecraft:baked_potato" - }, - { - "id": "minecraft:cookie" - }, - { - "id": "minecraft:pumpkin_pie" - }, - { - "id": "minecraft:cake" - }, - { - "id": "minecraft:dried_kelp" - }, - { - "id": "minecraft:fishing_rod" - }, - { - "id": "minecraft:carrot_on_a_stick" - }, - { - "id": "minecraft:warped_fungus_on_a_stick" - }, - { - "id": "minecraft:snowball" - }, - { - "id": "minecraft:shears" - }, - { - "id": "minecraft:flint_and_steel" - }, - { - "id": "minecraft:lead" - }, - { - "id": "minecraft:clock" - }, - { - "id": "minecraft:compass" - }, - { - "id": "minecraft:recovery_compass" - }, - { - "id": "minecraft:goat_horn" - }, - { - "id": "minecraft:goat_horn", - "damage": 1 - }, - { - "id": "minecraft:goat_horn", - "damage": 2 - }, - { - "id": "minecraft:goat_horn", - "damage": 3 - }, - { - "id": "minecraft:goat_horn", - "damage": 4 - }, - { - "id": "minecraft:goat_horn", - "damage": 5 - }, - { - "id": "minecraft:goat_horn", - "damage": 6 - }, - { - "id": "minecraft:goat_horn", - "damage": 7 - }, - { - "id": "minecraft:empty_map" - }, - { - "id": "minecraft:empty_map", - "damage": 2 - }, - { - "id": "minecraft:saddle" - }, - { - "id": "minecraft:leather_horse_armor" - }, - { - "id": "minecraft:iron_horse_armor" - }, - { - "id": "minecraft:golden_horse_armor" - }, - { - "id": "minecraft:diamond_horse_armor" - }, - { - "id": "minecraft:trident" - }, - { - "id": "minecraft:turtle_helmet" - }, - { - "id": "minecraft:elytra" - }, - { - "id": "minecraft:totem_of_undying" - }, - { - "id": "minecraft:glass_bottle" - }, - { - "id": "minecraft:experience_bottle" - }, - { - "id": "minecraft:potion" - }, - { - "id": "minecraft:potion", - "damage": 1 - }, - { - "id": "minecraft:potion", - "damage": 2 - }, - { - "id": "minecraft:potion", - "damage": 3 - }, - { - "id": "minecraft:potion", - "damage": 4 - }, - { - "id": "minecraft:potion", - "damage": 5 - }, - { - "id": "minecraft:potion", - "damage": 6 - }, - { - "id": "minecraft:potion", - "damage": 7 - }, - { - "id": "minecraft:potion", - "damage": 8 - }, - { - "id": "minecraft:potion", - "damage": 9 - }, - { - "id": "minecraft:potion", - "damage": 10 - }, - { - "id": "minecraft:potion", - "damage": 11 - }, - { - "id": "minecraft:potion", - "damage": 12 - }, - { - "id": "minecraft:potion", - "damage": 13 - }, - { - "id": "minecraft:potion", - "damage": 14 - }, - { - "id": "minecraft:potion", - "damage": 15 - }, - { - "id": "minecraft:potion", - "damage": 16 - }, - { - "id": "minecraft:potion", - "damage": 17 - }, - { - "id": "minecraft:potion", - "damage": 18 - }, - { - "id": "minecraft:potion", - "damage": 19 - }, - { - "id": "minecraft:potion", - "damage": 20 - }, - { - "id": "minecraft:potion", - "damage": 21 - }, - { - "id": "minecraft:potion", - "damage": 22 - }, - { - "id": "minecraft:potion", - "damage": 23 - }, - { - "id": "minecraft:potion", - "damage": 24 - }, - { - "id": "minecraft:potion", - "damage": 25 - }, - { - "id": "minecraft:potion", - "damage": 26 - }, - { - "id": "minecraft:potion", - "damage": 27 - }, - { - "id": "minecraft:potion", - "damage": 28 - }, - { - "id": "minecraft:potion", - "damage": 29 - }, - { - "id": "minecraft:potion", - "damage": 30 - }, - { - "id": "minecraft:potion", - "damage": 31 - }, - { - "id": "minecraft:potion", - "damage": 32 - }, - { - "id": "minecraft:potion", - "damage": 33 - }, - { - "id": "minecraft:potion", - "damage": 34 - }, - { - "id": "minecraft:potion", - "damage": 35 - }, - { - "id": "minecraft:potion", - "damage": 36 - }, - { - "id": "minecraft:potion", - "damage": 37 - }, - { - "id": "minecraft:potion", - "damage": 38 - }, - { - "id": "minecraft:potion", - "damage": 39 - }, - { - "id": "minecraft:potion", - "damage": 40 - }, - { - "id": "minecraft:potion", - "damage": 41 - }, - { - "id": "minecraft:potion", - "damage": 42 - }, - { - "id": "minecraft:splash_potion" - }, - { - "id": "minecraft:splash_potion", - "damage": 1 - }, - { - "id": "minecraft:splash_potion", - "damage": 2 - }, - { - "id": "minecraft:splash_potion", - "damage": 3 - }, - { - "id": "minecraft:splash_potion", - "damage": 4 - }, - { - "id": "minecraft:splash_potion", - "damage": 5 - }, - { - "id": "minecraft:splash_potion", - "damage": 6 - }, - { - "id": "minecraft:splash_potion", - "damage": 7 - }, - { - "id": "minecraft:splash_potion", - "damage": 8 - }, - { - "id": "minecraft:splash_potion", - "damage": 9 - }, - { - "id": "minecraft:splash_potion", - "damage": 10 - }, - { - "id": "minecraft:splash_potion", - "damage": 11 - }, - { - "id": "minecraft:splash_potion", - "damage": 12 - }, - { - "id": "minecraft:splash_potion", - "damage": 13 - }, - { - "id": "minecraft:splash_potion", - "damage": 14 - }, - { - "id": "minecraft:splash_potion", - "damage": 15 - }, - { - "id": "minecraft:splash_potion", - "damage": 16 - }, - { - "id": "minecraft:splash_potion", - "damage": 17 - }, - { - "id": "minecraft:splash_potion", - "damage": 18 - }, - { - "id": "minecraft:splash_potion", - "damage": 19 - }, - { - "id": "minecraft:splash_potion", - "damage": 20 - }, - { - "id": "minecraft:splash_potion", - "damage": 21 - }, - { - "id": "minecraft:splash_potion", - "damage": 22 - }, - { - "id": "minecraft:splash_potion", - "damage": 23 - }, - { - "id": "minecraft:splash_potion", - "damage": 24 - }, - { - "id": "minecraft:splash_potion", - "damage": 25 - }, - { - "id": "minecraft:splash_potion", - "damage": 26 - }, - { - "id": "minecraft:splash_potion", - "damage": 27 - }, - { - "id": "minecraft:splash_potion", - "damage": 28 - }, - { - "id": "minecraft:splash_potion", - "damage": 29 - }, - { - "id": "minecraft:splash_potion", - "damage": 30 - }, - { - "id": "minecraft:splash_potion", - "damage": 31 - }, - { - "id": "minecraft:splash_potion", - "damage": 32 - }, - { - "id": "minecraft:splash_potion", - "damage": 33 - }, - { - "id": "minecraft:splash_potion", - "damage": 34 - }, - { - "id": "minecraft:splash_potion", - "damage": 35 - }, - { - "id": "minecraft:splash_potion", - "damage": 36 - }, - { - "id": "minecraft:splash_potion", - "damage": 37 - }, - { - "id": "minecraft:splash_potion", - "damage": 38 - }, - { - "id": "minecraft:splash_potion", - "damage": 39 - }, - { - "id": "minecraft:splash_potion", - "damage": 40 - }, - { - "id": "minecraft:splash_potion", - "damage": 41 - }, - { - "id": "minecraft:splash_potion", - "damage": 42 - }, - { - "id": "minecraft:lingering_potion" - }, - { - "id": "minecraft:lingering_potion", - "damage": 1 - }, - { - "id": "minecraft:lingering_potion", - "damage": 2 - }, - { - "id": "minecraft:lingering_potion", - "damage": 3 - }, - { - "id": "minecraft:lingering_potion", - "damage": 4 - }, - { - "id": "minecraft:lingering_potion", - "damage": 5 - }, - { - "id": "minecraft:lingering_potion", - "damage": 6 - }, - { - "id": "minecraft:lingering_potion", - "damage": 7 - }, - { - "id": "minecraft:lingering_potion", - "damage": 8 - }, - { - "id": "minecraft:lingering_potion", - "damage": 9 - }, - { - "id": "minecraft:lingering_potion", - "damage": 10 - }, - { - "id": "minecraft:lingering_potion", - "damage": 11 - }, - { - "id": "minecraft:lingering_potion", - "damage": 12 - }, - { - "id": "minecraft:lingering_potion", - "damage": 13 - }, - { - "id": "minecraft:lingering_potion", - "damage": 14 - }, - { - "id": "minecraft:lingering_potion", - "damage": 15 - }, - { - "id": "minecraft:lingering_potion", - "damage": 16 - }, - { - "id": "minecraft:lingering_potion", - "damage": 17 - }, - { - "id": "minecraft:lingering_potion", - "damage": 18 - }, - { - "id": "minecraft:lingering_potion", - "damage": 19 - }, - { - "id": "minecraft:lingering_potion", - "damage": 20 - }, - { - "id": "minecraft:lingering_potion", - "damage": 21 - }, - { - "id": "minecraft:lingering_potion", - "damage": 22 - }, - { - "id": "minecraft:lingering_potion", - "damage": 23 - }, - { - "id": "minecraft:lingering_potion", - "damage": 24 - }, - { - "id": "minecraft:lingering_potion", - "damage": 25 - }, - { - "id": "minecraft:lingering_potion", - "damage": 26 - }, - { - "id": "minecraft:lingering_potion", - "damage": 27 - }, - { - "id": "minecraft:lingering_potion", - "damage": 28 - }, - { - "id": "minecraft:lingering_potion", - "damage": 29 - }, - { - "id": "minecraft:lingering_potion", - "damage": 30 - }, - { - "id": "minecraft:lingering_potion", - "damage": 31 - }, - { - "id": "minecraft:lingering_potion", - "damage": 32 - }, - { - "id": "minecraft:lingering_potion", - "damage": 33 - }, - { - "id": "minecraft:lingering_potion", - "damage": 34 - }, - { - "id": "minecraft:lingering_potion", - "damage": 35 - }, - { - "id": "minecraft:lingering_potion", - "damage": 36 - }, - { - "id": "minecraft:lingering_potion", - "damage": 37 - }, - { - "id": "minecraft:lingering_potion", - "damage": 38 - }, - { - "id": "minecraft:lingering_potion", - "damage": 39 - }, - { - "id": "minecraft:lingering_potion", - "damage": 40 - }, - { - "id": "minecraft:lingering_potion", - "damage": 41 - }, - { - "id": "minecraft:lingering_potion", - "damage": 42 - }, - { - "id": "minecraft:spyglass" - }, - { - "id": "minecraft:brush" - }, - { - "id": "minecraft:stick" - }, - { - "id": "minecraft:bed" - }, - { - "id": "minecraft:bed", - "damage": 8 - }, - { - "id": "minecraft:bed", - "damage": 7 - }, - { - "id": "minecraft:bed", - "damage": 15 - }, - { - "id": "minecraft:bed", - "damage": 12 - }, - { - "id": "minecraft:bed", - "damage": 14 - }, - { - "id": "minecraft:bed", - "damage": 1 - }, - { - "id": "minecraft:bed", - "damage": 4 - }, - { - "id": "minecraft:bed", - "damage": 5 - }, - { - "id": "minecraft:bed", - "damage": 13 - }, - { - "id": "minecraft:bed", - "damage": 9 - }, - { - "id": "minecraft:bed", - "damage": 3 - }, - { - "id": "minecraft:bed", - "damage": 11 - }, - { - "id": "minecraft:bed", - "damage": 10 - }, - { - "id": "minecraft:bed", - "damage": 2 - }, - { - "id": "minecraft:bed", - "damage": 6 - }, - { - "id": "minecraft:torch", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lk+BwwuQoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:soul_torch", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWShbFILCgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sea_pickle", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWSINWQyCgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:lantern", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWRkjQvzCgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:soul_lantern", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZGfoP8cKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:candle", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZHsBMA0KBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:white_candle", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZKN1mmgKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:orange_candle", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWSfVz82CgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:magenta_candle", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lk9xGNkQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:light_blue_candle", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lk2m1y8goGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:yellow_candle", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWR9LTmpCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:lime_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lkIAUu6QoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:pink_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lk23Rn5AoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:gray_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lk3trRCAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:light_gray_candle", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkb6DOegoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cyan_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkZoIQOQoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:purple_candle", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWSnLI2BCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:blue_candle", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkrxrjQAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:brown_candle", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZKSkBXYKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:green_candle", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZBkznDsKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:red_candle", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWRbb88GCgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:black_candle", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZNnOnuEKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:crafting_table", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkwCxwaAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cartography_table", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkI6FzMwoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:fletching_table", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZJ2mW0oKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:smithing_table", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lkXWMBzQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:beehive", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWR/idcaCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:suspicious_sand", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZKnkaIAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:suspicious_gravel", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkvIEJAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:campfire" - }, - { - "id": "minecraft:soul_campfire" - }, - { - "id": "minecraft:furnace", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWRZxnDOCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:blast_furnace", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTcEbV/CgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:smoker", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZGWswMwKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:respawn_anchor", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkmhMcaQoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:brewing_stand" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lk8Z3VowoGAHN0YXRlcwgGAGRhbWFnZQkAdW5kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkpiv8BAoGAHN0YXRlcwgGAGRhbWFnZRAAc2xpZ2h0bHlfZGFtYWdlZAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:anvil", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkFu+pdwoGAHN0YXRlcwgGAGRhbWFnZQwAdmVyeV9kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:grindstone", - "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWS4Es07CgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:enchanting_table", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWRliFFJCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:bookshelf", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZBcWwIwKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:chiseled_bookshelf", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZIprt5IKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:lectern", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR4JfDHCgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cauldron" - }, - { - "id": "minecraft:composter", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZHIL6i4KBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:chest", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkcrctxAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:trapped_chest", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWSdRfncCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:ender_chest", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkOc75awoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:barrel", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZPnxzgsKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:undyed_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZJ8rxp0KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:white_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkjrET6goGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:light_gray_shulker_box", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWSCVJv0CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:gray_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWS3WMsWCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:black_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lkXHztNAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:brown_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkaXxpYQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:red_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZNrf+icKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:orange_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGoO05gKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:yellow_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZBCBSiYKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:lime_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWRJeKqqCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:green_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkzJiohQoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:cyan_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTHeliECgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:light_blue_shulker_box", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWQXD8U0CgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:blue_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWTO4PJaCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:purple_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZFK25GAKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:magenta_shulker_box", - "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTyyudTCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:pink_shulker_box", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQOEGXjCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:armor_stand" - }, - { - "id": "minecraft:noteblock", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZH1U5QkKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:jukebox", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWSmR7JfCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:music_disc_13" - }, - { - "id": "minecraft:music_disc_cat" - }, - { - "id": "minecraft:music_disc_blocks" - }, - { - "id": "minecraft:music_disc_chirp" - }, - { - "id": "minecraft:music_disc_far" - }, - { - "id": "minecraft:music_disc_mall" - }, - { - "id": "minecraft:music_disc_mellohi" - }, - { - "id": "minecraft:music_disc_stal" - }, - { - "id": "minecraft:music_disc_strad" - }, - { - "id": "minecraft:music_disc_ward" - }, - { - "id": "minecraft:music_disc_11" - }, - { - "id": "minecraft:music_disc_wait" - }, - { - "id": "minecraft:music_disc_otherside" - }, - { - "id": "minecraft:music_disc_5" - }, - { - "id": "minecraft:music_disc_pigstep" - }, - { - "id": "minecraft:music_disc_relic" - }, - { - "id": "minecraft:disc_fragment_5" - }, - { - "id": "minecraft:glowstone_dust" - }, - { - "id": "minecraft:glowstone", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZGT7WYYKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:redstone_lamp", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWRvNPwnCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:sea_lantern", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lk1PPVyAoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:oak_sign" - }, - { - "id": "minecraft:spruce_sign" - }, - { - "id": "minecraft:birch_sign" - }, - { - "id": "minecraft:jungle_sign" - }, - { - "id": "minecraft:acacia_sign" - }, - { - "id": "minecraft:dark_oak_sign" - }, - { - "id": "minecraft:mangrove_sign" - }, - { - "id": "minecraft:cherry_sign" - }, - { - "id": "minecraft:bamboo_sign" - }, - { - "id": "minecraft:crimson_sign" - }, - { - "id": "minecraft:warped_sign" - }, - { - "id": "minecraft:oak_hanging_sign" - }, - { - "id": "minecraft:spruce_hanging_sign" - }, - { - "id": "minecraft:birch_hanging_sign" - }, - { - "id": "minecraft:jungle_hanging_sign" - }, - { - "id": "minecraft:acacia_hanging_sign" - }, - { - "id": "minecraft:dark_oak_hanging_sign" - }, - { - "id": "minecraft:mangrove_hanging_sign" - }, - { - "id": "minecraft:cherry_hanging_sign" - }, - { - "id": "minecraft:bamboo_hanging_sign" - }, - { - "id": "minecraft:crimson_hanging_sign" - }, - { - "id": "minecraft:warped_hanging_sign" - }, - { - "id": "minecraft:painting" - }, - { - "id": "minecraft:frame" - }, - { - "id": "minecraft:glow_frame" - }, - { - "id": "minecraft:honey_bottle" - }, - { - "id": "minecraft:flower_pot" - }, - { - "id": "minecraft:bowl" - }, - { - "id": "minecraft:bucket" - }, - { - "id": "minecraft:milk_bucket" - }, - { - "id": "minecraft:water_bucket" - }, - { - "id": "minecraft:lava_bucket" - }, - { - "id": "minecraft:cod_bucket" - }, - { - "id": "minecraft:salmon_bucket" - }, - { - "id": "minecraft:tropical_fish_bucket" - }, - { - "id": "minecraft:pufferfish_bucket" - }, - { - "id": "minecraft:powder_snow_bucket" - }, - { - "id": "minecraft:axolotl_bucket" - }, - { - "id": "minecraft:tadpole_bucket" - }, - { - "id": "minecraft:skull", - "damage": 3 - }, - { - "id": "minecraft:skull", - "damage": 2 - }, - { - "id": "minecraft:skull", - "damage": 4 - }, - { - "id": "minecraft:skull", - "damage": 5 - }, - { - "id": "minecraft:skull" - }, - { - "id": "minecraft:skull", - "damage": 1 - }, - { - "id": "minecraft:skull", - "damage": 6 - }, - { - "id": "minecraft:beacon", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZF8jfiEKBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:bell", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWT7zhOoCgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:conduit", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWTWcBVnCgYAc3RhdGVzAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stonecutter_block", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lk18KHygoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:end_portal_frame", - "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWRbGHf8CgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:coal" - }, - { - "id": "minecraft:charcoal" - }, - { - "id": "minecraft:diamond" - }, - { - "id": "minecraft:iron_nugget" - }, - { - "id": "minecraft:raw_iron" - }, - { - "id": "minecraft:raw_gold" - }, - { - "id": "minecraft:raw_copper" - }, - { - "id": "minecraft:copper_ingot" - }, - { - "id": "minecraft:iron_ingot" - }, - { - "id": "minecraft:netherite_scrap" - }, - { - "id": "minecraft:netherite_ingot" - }, - { - "id": "minecraft:gold_nugget" - }, - { - "id": "minecraft:gold_ingot" - }, - { - "id": "minecraft:emerald" - }, - { - "id": "minecraft:quartz" - }, - { - "id": "minecraft:clay_ball" - }, - { - "id": "minecraft:brick" - }, - { - "id": "minecraft:netherbrick" - }, - { - "id": "minecraft:prismarine_shard" - }, - { - "id": "minecraft:amethyst_shard" - }, - { - "id": "minecraft:prismarine_crystals" - }, - { - "id": "minecraft:nautilus_shell" - }, - { - "id": "minecraft:heart_of_the_sea" - }, - { - "id": "minecraft:scute" - }, - { - "id": "minecraft:phantom_membrane" - }, - { - "id": "minecraft:string" - }, - { - "id": "minecraft:feather" - }, - { - "id": "minecraft:flint" - }, - { - "id": "minecraft:gunpowder" - }, - { - "id": "minecraft:leather" - }, - { - "id": "minecraft:rabbit_hide" - }, - { - "id": "minecraft:rabbit_foot" - }, - { - "id": "minecraft:fire_charge" - }, - { - "id": "minecraft:blaze_rod" - }, - { - "id": "minecraft:blaze_powder" - }, - { - "id": "minecraft:magma_cream" - }, - { - "id": "minecraft:fermented_spider_eye" - }, - { - "id": "minecraft:echo_shard" - }, - { - "id": "minecraft:dragon_breath" - }, - { - "id": "minecraft:shulker_shell" - }, - { - "id": "minecraft:ghast_tear" - }, - { - "id": "minecraft:slime_ball" - }, - { - "id": "minecraft:ender_pearl" - }, - { - "id": "minecraft:ender_eye" - }, - { - "id": "minecraft:nether_star" - }, - { - "id": "minecraft:end_rod", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmVuZF9yb2QECQBuYW1lX2hhc2jx/q5cEA0hmQMKAG5ldHdvcmtfaWQ2eM8kCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:lightning_rod", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWRLuHyACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:end_crystal" - }, - { - "id": "minecraft:paper" - }, - { - "id": "minecraft:book" - }, - { - "id": "minecraft:writable_book" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQIAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQQAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQVAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQWAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQaAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQbAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQcAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAUAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQgAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQhAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAQAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAEAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAIAAAA=" - }, - { - "id": "minecraft:enchanted_book", - "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAMAAAA=" - }, - { - "id": "minecraft:oak_boat" - }, - { - "id": "minecraft:spruce_boat" - }, - { - "id": "minecraft:birch_boat" - }, - { - "id": "minecraft:jungle_boat" - }, - { - "id": "minecraft:acacia_boat" - }, - { - "id": "minecraft:dark_oak_boat" - }, - { - "id": "minecraft:mangrove_boat" - }, - { - "id": "minecraft:cherry_boat" - }, - { - "id": "minecraft:bamboo_raft" - }, - { - "id": "minecraft:oak_chest_boat" - }, - { - "id": "minecraft:spruce_chest_boat" - }, - { - "id": "minecraft:birch_chest_boat" - }, - { - "id": "minecraft:jungle_chest_boat" - }, - { - "id": "minecraft:acacia_chest_boat" - }, - { - "id": "minecraft:dark_oak_chest_boat" - }, - { - "id": "minecraft:mangrove_chest_boat" - }, - { - "id": "minecraft:cherry_chest_boat" - }, - { - "id": "minecraft:bamboo_chest_raft" - }, - { - "id": "minecraft:rail", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWR+Sp6YCgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:golden_rail", - "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lkfAcxLwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:detector_rail", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWRVW/aICgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:activator_rail", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkZfckmwoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:minecart" - }, - { - "id": "minecraft:chest_minecart" - }, - { - "id": "minecraft:hopper_minecart" - }, - { - "id": "minecraft:tnt_minecart" - }, - { - "id": "minecraft:redstone" - }, - { - "id": "minecraft:redstone_block", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lklayOHgoGAHN0YXRlcwADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:redstone_torch", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkuHz7yAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:lever", - "block_state_b64": "CgAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lkEF/GuAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wooden_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWSU07kYCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:spruce_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWTkUIGuCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:birch_button", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZGWp3yoKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:jungle_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWT9fImWCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:acacia_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRQnxIJCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:dark_oak_button", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZN5vAmIKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:mangrove_button", - "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZAFEGQ0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cherry_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRJ1irQCgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:bamboo_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSa9w4/CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_button", - "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZMw+aC0KBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:crimson_button", - "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lk+n1vyQoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:warped_button", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWTnHnk1CgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:polished_blackstone_button", - "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lkDtQ95woGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:tripwire_hook", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWSy+1KJCgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:wooden_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZDRzPNwKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:spruce_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZLQMCw0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:birch_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkH0G97AoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:jungle_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZLdPBSAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:acacia_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZIDdI18KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:dark_oak_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkKpi8rAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:mangrove_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lkuwWDyQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:cherry_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZPNT+r0KBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:bamboo_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZIZ8XnYKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:crimson_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWRmV18LCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:warped_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZJVRoIcKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:stone_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkjDydwQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:light_weighted_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkrr2AjgoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:heavy_weighted_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkFxVKuQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:polished_blackstone_pressure_plate", - "block_state_b64": "CgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWTaSW5xCgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:observer", - "block_state_b64": "CgAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkQEh55goGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:daylight_detector", - "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkri5afQoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:repeater" - }, - { - "id": "minecraft:comparator" - }, - { - "id": "minecraft:hopper" - }, - { - "id": "minecraft:dropper", - "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQfQN6zCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:dispenser", - "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24yHhQBAA==" - }, - { - "id": "minecraft:piston", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:sticky_piston", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWT/MzCJCgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:tnt", - "block_state_b64": "CgAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZCGfjU4KBgBzdGF0ZXMBFABhbGxvd191bmRlcndhdGVyX2JpdAABCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:name_tag" - }, - { - "id": "minecraft:loom", - "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWR/49HXCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:banner" - }, - { - "id": "minecraft:banner", - "damage": 8 - }, - { - "id": "minecraft:banner", - "damage": 7 - }, - { - "id": "minecraft:banner", - "damage": 15 - }, - { - "id": "minecraft:banner", - "damage": 12 - }, - { - "id": "minecraft:banner", - "damage": 14 - }, - { - "id": "minecraft:banner", - "damage": 1 - }, - { - "id": "minecraft:banner", - "damage": 4 - }, - { - "id": "minecraft:banner", - "damage": 5 - }, - { - "id": "minecraft:banner", - "damage": 13 - }, - { - "id": "minecraft:banner", - "damage": 9 - }, - { - "id": "minecraft:banner", - "damage": 3 - }, - { - "id": "minecraft:banner", - "damage": 11 - }, - { - "id": "minecraft:banner", - "damage": 10 - }, - { - "id": "minecraft:banner", - "damage": 2 - }, - { - "id": "minecraft:banner", - "damage": 6 - }, - { - "id": "minecraft:banner", - "damage": 15, - "nbt_b64": "CgAAAwQAVHlwZQEAAAAA" - }, - { - "id": "minecraft:creeper_banner_pattern" - }, - { - "id": "minecraft:skull_banner_pattern" - }, - { - "id": "minecraft:flower_banner_pattern" - }, - { - "id": "minecraft:mojang_banner_pattern" - }, - { - "id": "minecraft:field_masoned_banner_pattern" - }, - { - "id": "minecraft:bordure_indented_banner_pattern" - }, - { - "id": "minecraft:piglin_banner_pattern" - }, - { - "id": "minecraft:globe_banner_pattern" - }, - { - "id": "minecraft:angler_pottery_sherd" - }, - { - "id": "minecraft:archer_pottery_sherd" - }, - { - "id": "minecraft:arms_up_pottery_sherd" - }, - { - "id": "minecraft:blade_pottery_sherd" - }, - { - "id": "minecraft:brewer_pottery_sherd" - }, - { - "id": "minecraft:burn_pottery_sherd" - }, - { - "id": "minecraft:danger_pottery_sherd" - }, - { - "id": "minecraft:explorer_pottery_sherd" - }, - { - "id": "minecraft:friend_pottery_sherd" - }, - { - "id": "minecraft:heart_pottery_sherd" - }, - { - "id": "minecraft:heartbreak_pottery_sherd" - }, - { - "id": "minecraft:howl_pottery_sherd" - }, - { - "id": "minecraft:miner_pottery_sherd" - }, - { - "id": "minecraft:mourner_pottery_sherd" - }, - { - "id": "minecraft:plenty_pottery_sherd" - }, - { - "id": "minecraft:prize_pottery_sherd" - }, - { - "id": "minecraft:sheaf_pottery_sherd" - }, - { - "id": "minecraft:shelter_pottery_sherd" - }, - { - "id": "minecraft:skull_pottery_sherd" - }, - { - "id": "minecraft:snort_pottery_sherd" - }, - { - "id": "minecraft:netherite_upgrade_smithing_template" - }, - { - "id": "minecraft:sentry_armor_trim_smithing_template" - }, - { - "id": "minecraft:vex_armor_trim_smithing_template" - }, - { - "id": "minecraft:wild_armor_trim_smithing_template" - }, - { - "id": "minecraft:coast_armor_trim_smithing_template" - }, - { - "id": "minecraft:dune_armor_trim_smithing_template" - }, - { - "id": "minecraft:wayfinder_armor_trim_smithing_template" - }, - { - "id": "minecraft:shaper_armor_trim_smithing_template" - }, - { - "id": "minecraft:raiser_armor_trim_smithing_template" - }, - { - "id": "minecraft:host_armor_trim_smithing_template" - }, - { - "id": "minecraft:ward_armor_trim_smithing_template" - }, - { - "id": "minecraft:silence_armor_trim_smithing_template" - }, - { - "id": "minecraft:tide_armor_trim_smithing_template" - }, - { - "id": "minecraft:snout_armor_trim_smithing_template" - }, - { - "id": "minecraft:rib_armor_trim_smithing_template" - }, - { - "id": "minecraft:eye_armor_trim_smithing_template" - }, - { - "id": "minecraft:spire_armor_trim_smithing_template" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwAAAAAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAABwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAIBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAHBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAPBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAMBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAOBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAABBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAEBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAFBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAANBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAJBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAADBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAALBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAKBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAACBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_rocket", - "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAGBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" - }, - { - "id": "minecraft:firework_star", - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yIR0d/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 8, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yUk9H/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 7, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yl52d/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 15, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y8PDw/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 12, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y2rM6/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 14, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yHYD5/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 1, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yJi6w/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 4, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqkQ8/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 5, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yuDKJ/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 13, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yvU7H/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 9, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqovz/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 3, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yMlSD/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 11, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yPdj+/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 10, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yH8eA/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 2, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yFnxe/wA=" - }, - { - "id": "minecraft:firework_star", - "damage": 6, - "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9ynJwW/wA=" - }, - { - "id": "minecraft:chain" - }, - { - "id": "minecraft:target", - "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZPBozs0KBgBzdGF0ZXMAAwcAdmVyc2lvbjIeFAEA" - }, - { - "id": "minecraft:decorated_pot", - "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWRwvkUUCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uMh4UAQA=" - }, - { - "id": "minecraft:lodestone_compass" - }, - { - "id": "minecraft:wither_spawn_egg" - }, - { - "id": "minecraft:ender_dragon_spawn_egg" - } - ] -} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/creative_items.1_20_50.json b/core/src/main/resources/bedrock/creative_items.1_20_50.json index c72695a42..d93aa4c00 100644 --- a/core/src/main/resources/bedrock/creative_items.1_20_50.json +++ b/core/src/main/resources/bedrock/creative_items.1_20_50.json @@ -1044,34 +1044,122 @@ "id": "minecraft:copper_block", "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZIiUodwKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" }, + { + "id": "minecraft:copper_door" + }, + { + "id": "minecraft:copper_trapdoor", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO9fXio+svKVAwoAbmV0d29ya19pZMCoRjEKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:copper_grate", + "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaC/JEFOWnmEcAwoAbmV0d29ya19pZC6YiiMKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" + }, { "id": "minecraft:exposed_copper", "block_state_b64": "CgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lk72jFIwoGAHN0YXRlcwADBwB2ZXJzaW9uATIUAQA=" }, + { + "id": "minecraft:exposed_copper_door" + }, + { + "id": "minecraft:exposed_copper_trapdoor", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoYhDFUysN7qUDCgBuZXR3b3JrX2lkMzwGJgoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:exposed_copper_grate", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNolFIBYLYU0IcDCgBuZXR3b3JrX2lk4UqptAoGAHN0YXRlcwADBwB2ZXJzaW9uATIUAQA=" + }, { "id": "minecraft:weathered_copper", "block_state_b64": "CgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWQwM0lJCgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" }, + { + "id": "minecraft:weathered_copper_door" + }, + { + "id": "minecraft:weathered_copper_trapdoor", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2hFnEC282a1tgMKAG5ldHdvcmtfaWTk70oiCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEyFAEA" + }, + { + "id": "minecraft:weathered_copper_grate", + "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2jB3o8enlv1RgMKAG5ldHdvcmtfaWRih2pOCgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" + }, { "id": "minecraft:oxidized_copper", "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZGjN8bUKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" }, + { + "id": "minecraft:oxidized_copper_door" + }, + { + "id": "minecraft:oxidized_copper_trapdoor", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaOJpG/XFexVwAwoAbmV0d29ya19pZPhi0J4KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:oxidized_copper_grate", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaBRfNhyndve7AwoAbmV0d29ya19pZKY2cnEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" + }, { "id": "minecraft:waxed_copper", "block_state_b64": "CgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIjtz/0KBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" }, + { + "id": "minecraft:waxed_copper_door" + }, + { + "id": "minecraft:waxed_copper_trapdoor", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaO0JUKUHqNU6AwoAbmV0d29ya19pZJC3ZuMKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:waxed_copper_grate", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaDmC92M2RO+HAwoAbmV0d29ya19pZH4og2AKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" + }, { "id": "minecraft:waxed_exposed_copper", "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lklz8yWQoGAHN0YXRlcwADBwB2ZXJzaW9uATIUAQA=" }, + { + "id": "minecraft:waxed_exposed_copper_door" + }, + { + "id": "minecraft:waxed_exposed_copper_trapdoor", + "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX3RyYXBkb29yBAkAbmFtZV9oYXNoBHHxCpkUzpgDCgBuZXR3b3JrX2lkw2XBGQoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:waxed_exposed_copper_grate", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2dyYXRlBAkAbmFtZV9oYXNoWmd6B+hWwiEDCgBuZXR3b3JrX2lk8d4ZQwoGAHN0YXRlcwADBwB2ZXJzaW9uATIUAQA=" + }, { "id": "minecraft:waxed_weathered_copper", "block_state_b64": "CgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWSQ9Ln9CgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" }, + { + "id": "minecraft:waxed_weathered_copper_door" + }, + { + "id": "minecraft:waxed_weathered_copper_trapdoor", + "block_state_b64": "CgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfdHJhcGRvb3IECQBuYW1lX2hhc2gH9Fi3JCF4egMKAG5ldHdvcmtfaWRkGU6TCgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgEyFAEA" + }, + { + "id": "minecraft:waxed_weathered_copper_grate", + "block_state_b64": "CgAACAQAbmFtZSYAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfZ3JhdGUECQBuYW1lX2hhc2hXfilVFDAiYQMKAG5ldHdvcmtfaWQqTGC1CgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" + }, { "id": "minecraft:waxed_oxidized_copper", "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZJhGfLEKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" }, + { + "id": "minecraft:waxed_oxidized_copper_door" + }, + { + "id": "minecraft:waxed_oxidized_copper_trapdoor", + "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl90cmFwZG9vcgQJAG5hbWVfaGFzaNA/q9qAy6Z9AwoAbmV0d29ya19pZDgExS8KBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:waxed_oxidized_copper_grate", + "block_state_b64": "CgAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9ncmF0ZQQJAG5hbWVfaGFzaEbeMT605GP4AwoAbmV0d29ya19pZOZjpkkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" + }, { "id": "minecraft:cut_copper", "block_state_b64": "CgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWTnFBtYCgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" @@ -1104,6 +1192,70 @@ "id": "minecraft:waxed_oxidized_cut_copper", "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWQ/wSkCCgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" }, + { + "id": "minecraft:chiseled_copper", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OmNoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaIsW5pmpJEuQAwoAbmV0d29ya19pZHetwrkKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" + }, + { + "id": "minecraft:exposed_chiseled_copper", + "block_state_b64": "CgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoOvrLJ0UowbgDCgBuZXR3b3JrX2lkZj7cPwoGAHN0YXRlcwADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:weathered_chiseled_copper", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hh+42XlsWvGAMKAG5ldHdvcmtfaWS7Cy59CgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:oxidized_chiseled_copper", + "block_state_b64": "CgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaLpTIsnfluiCAwoAbmV0d29ya19pZB9/jS8KBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" + }, + { + "id": "minecraft:waxed_chiseled_copper", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaFnXvXY5OinzAwoAbmV0d29ya19pZAcKtHsKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" + }, + { + "id": "minecraft:waxed_exposed_chiseled_copper", + "block_state_b64": "CgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY2hpc2VsZWRfY29wcGVyBAkAbmFtZV9oYXNoHJdq+Pph6hMDCgBuZXR3b3JrX2lkdge7IAoGAHN0YXRlcwADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:waxed_oxidized_chiseled_copper", + "block_state_b64": "CgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NoaXNlbGVkX2NvcHBlcgQJAG5hbWVfaGFzaMj49OvlTpgCAwoAbmV0d29ya19pZN/r+roKBgBzdGF0ZXMAAwcAdmVyc2lvbgEyFAEA" + }, + { + "id": "minecraft:waxed_weathered_chiseled_copper", + "block_state_b64": "CgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jaGlzZWxlZF9jb3BwZXIECQBuYW1lX2hhc2hzuO+Sg9LYQwMKAG5ldHdvcmtfaWQ7AN7iCgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:copper_bulb", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcHBlcl9idWxiBAkAbmFtZV9oYXNo41TimHOsMWcDCgBuZXR3b3JrX2lkJnZvAgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEyFAEA" + }, + { + "id": "minecraft:exposed_copper_bulb", + "block_state_b64": "CgAACAQAbmFtZR0AbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2g++f1wYLLCrAMKAG5ldHdvcmtfaWRLdMmGCgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:weathered_copper_bulb", + "block_state_b64": "CgAACAQAbmFtZR8AbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMEtsYfwRTXlAwoAbmV0d29ya19pZAp51LQKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:oxidized_copper_bulb", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNovnrBQZs8nDIDCgBuZXR3b3JrX2lkPsj0AAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEyFAEA" + }, + { + "id": "minecraft:waxed_copper_bulb", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OndheGVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoGTg6TYllMiIDCgBuZXR3b3JrX2lk9m0WhgoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEyFAEA" + }, + { + "id": "minecraft:waxed_exposed_copper_bulb", + "block_state_b64": "CgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyX2J1bGIECQBuYW1lX2hhc2gI6xkPcvBDVwMKAG5ldHdvcmtfaWR7BRcACgYAc3RhdGVzAQMAbGl0AAELAHBvd2VyZWRfYml0AAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper_bulb", + "block_state_b64": "CgAACAQAbmFtZSUAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXJfYnVsYgQJAG5hbWVfaGFzaMsUnmp3/VqVAwoAbmV0d29ya19pZEoworoKBgBzdGF0ZXMBAwBsaXQAAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper_bulb", + "block_state_b64": "CgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcl9idWxiBAkAbmFtZV9oYXNoBFKxY3fjVq4DCgBuZXR3b3JrX2lkzrJ6aAoGAHN0YXRlcwEDAGxpdAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgEyFAEA" + }, { "id": "minecraft:emerald_block", "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWRk5+otCgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" @@ -2509,6 +2661,58 @@ "id": "minecraft:tuff", "block_state_b64": "CgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRwQGn0CgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" }, + { + "id": "minecraft:tuff_stairs", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfc3RhaXJzBAkAbmFtZV9oYXNoKjyNUBjcfZsDCgBuZXR3b3JrX2lk+LsycgoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:tuff_slab", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfc2xhYgQJAG5hbWVfaGFzaIhCGdlIsnMUAwoAbmV0d29ya19pZN1dUL4KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:tuff_wall", + "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OnR1ZmZfd2FsbAQJAG5hbWVfaGFzaMyeeu1IRf03AwoAbmV0d29ya19pZDkIrosKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:chiseled_tuff", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmYECQBuYW1lX2hhc2iVliOT8OTQ9AMKAG5ldHdvcmtfaWTLNKOiCgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:polished_tuff", + "block_state_b64": "CgAACAQAbmFtZRcAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmYECQBuYW1lX2hhc2hyaLe/KEVZ0gMKAG5ldHdvcmtfaWTcX3NrCgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:polished_tuff_stairs", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc3RhaXJzBAkAbmFtZV9oYXNo8yuah8QI1dcDCgBuZXR3b3JrX2lkjLoU4AoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:polished_tuff_slab", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfc2xhYgQJAG5hbWVfaGFzaLXdb48YvAsHAwoAbmV0d29ya19pZAnJ7W0KBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:polished_tuff_wall", + "block_state_b64": "CgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX3R1ZmZfd2FsbAQJAG5hbWVfaGFzaJVZj6QYWXUrAwoAbmV0d29ya19pZLU7dooKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:tuff_bricks", + "block_state_b64": "CgAACAQAbmFtZRUAbWluZWNyYWZ0OnR1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo/hbQ+mXSK7wDCgBuZXR3b3JrX2lk6gmIwQoGAHN0YXRlcwADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:tuff_brick_stairs", + "block_state_b64": "CgAACAQAbmFtZRsAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNoWJpkAurUfKwDCgBuZXR3b3JrX2lkUMcjiwoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:tuff_brick_slab", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaLqPMjVCv5dIAwoAbmV0d29ya19pZOmeRhcKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BMhQBAA==" + }, + { + "id": "minecraft:tuff_brick_wall", + "block_state_b64": "CgAACAQAbmFtZRkAbWluZWNyYWZ0OnR1ZmZfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaIL0IyNCOsonAwoAbmV0d29ya19pZJW4T5UKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uATIUAQA=" + }, + { + "id": "minecraft:chiseled_tuff_bricks", + "block_state_b64": "CgAACAQAbmFtZR4AbWluZWNyYWZ0OmNoaXNlbGVkX3R1ZmZfYnJpY2tzBAkAbmFtZV9oYXNo3oQw6gmxYuADCgBuZXR3b3JrX2lkm3D8AgoGAHN0YXRlcwADBwB2ZXJzaW9uATIUAQA=" + }, { "id": "minecraft:calcite", "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWQlSbJDCgYAc3RhdGVzAAMHAHZlcnNpb24BMhQBAA==" @@ -5394,6 +5598,10 @@ "id": "minecraft:dispenser", "block_state_b64": "CgAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZGAayD0KBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24BMhQBAA==" }, + { + "id": "minecraft:crafter", + "block_state_b64": "CgAACAQAbmFtZREAbWluZWNyYWZ0OmNyYWZ0ZXIECQBuYW1lX2hhc2iLCT/rJmRN8QMKAG5ldHdvcmtfaWTPTbvrCgYAc3RhdGVzAQgAY3JhZnRpbmcACAsAb3JpZW50YXRpb24JAGRvd25fZWFzdAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24BMhQBAA==" + }, { "id": "minecraft:piston", "block_state_b64": "CgAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZLD/5XQKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uATIUAQA=" From e2062dd1827cd288aa67a95db473a81a7e219300 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Fri, 1 Dec 2023 15:17:41 -0500 Subject: [PATCH 50/86] Reimplement support for 1.20.40 --- README.md | 2 +- .../geysermc/geyser/network/GameProtocol.java | 3 +- .../populator/BlockRegistryPopulator.java | 11 +- .../registry/populator/Conversion630_622.java | 213 ++++++++++++++++++ .../populator/ItemRegistryPopulator.java | 20 +- .../registry/type/GeyserMappingItem.java | 2 - core/src/main/resources/mappings | 2 +- 7 files changed, 220 insertions(+), 33 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_622.java diff --git a/README.md b/README.md index b3471b4d7..1663c493a 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! -### Currently supporting Minecraft Bedrock 1.20.0 - 1.20.50 and Minecraft Java 1.20.3 +### Currently supporting Minecraft Bedrock 1.20.40 - 1.20.50 and Minecraft Java 1.20.3 ## Setting Up Take a look [here](https://wiki.geysermc.org/geyser/setup/) for how to set up Geyser. diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index 923779095..e22d1da97 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -29,6 +29,7 @@ import com.github.steveice10.mc.protocol.codec.MinecraftCodec; import com.github.steveice10.mc.protocol.codec.PacketCodec; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; @@ -58,11 +59,9 @@ public final class GameProtocol { private static final PacketCodec DEFAULT_JAVA_CODEC = MinecraftCodec.CODEC; static { - /* SUPPORTED_BEDROCK_CODECS.add(Bedrock_v622.CODEC.toBuilder() .minecraftVersion("1.20.40/1.20.41") .build()); - */ SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index f185119ca..415e61ac2 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -34,18 +34,11 @@ import it.unimi.dsi.fastutil.ints.Int2ObjectMap; import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap; import it.unimi.dsi.fastutil.objects.*; import org.cloudburstmc.blockstateupdater.BlockStateUpdater; -import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_10; -import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_30; -import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_40; -import org.cloudburstmc.blockstateupdater.BlockStateUpdater_1_20_50; import org.cloudburstmc.blockstateupdater.util.tagupdater.CompoundTagUpdaterContext; import org.cloudburstmc.nbt.NBTInputStream; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; -import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; -import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; -import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618; import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; @@ -83,7 +76,7 @@ public final class BlockRegistryPopulator { } @FunctionalInterface - private interface Remapper { + interface Remapper { NbtMap remap(NbtMap tag); @@ -123,7 +116,7 @@ public final class BlockRegistryPopulator { private static void registerBedrockBlocks() { var blockMappers = ImmutableMap., Remapper>builder() - //.put(ObjectIntPair.of("1_20_40", Bedrock_v622.CODEC.getProtocolVersion()), mapper622) + .put(ObjectIntPair.of("1_20_40", Bedrock_v622.CODEC.getProtocolVersion()), Conversion630_622::remapBlock) .put(ObjectIntPair.of("1_20_50", Bedrock_v630.CODEC.getProtocolVersion()), tag -> tag) .build(); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_622.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_622.java new file mode 100644 index 000000000..9404774b8 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_622.java @@ -0,0 +1,213 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.registry.populator; + +import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtMapBuilder; +import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.registry.type.GeyserMappingItem; + +import java.util.List; +import java.util.Map; + +/** + * Backwards-maps the blocks and items of 1.20.50 (630) to 1.20.40 (622) + */ +public class Conversion630_622 { + + private static final List NEW_STONES = List.of("minecraft:stone", "minecraft:granite", "minecraft:polished_granite", "minecraft:diorite", "minecraft:polished_diorite", "minecraft:andesite", "minecraft:polished_andesite"); + private static final List NEW_WOODS = List.of("minecraft:oak_planks", "minecraft:spruce_planks", "minecraft:birch_planks", "minecraft:jungle_planks", "minecraft:acacia_planks", "minecraft:dark_oak_planks"); + + private static final Map ITEMS = new Object2ObjectOpenHashMap<>(); + + static { + ITEMS.put("minecraft:acacia_planks", "minecraft:planks"); + ITEMS.put("minecraft:birch_planks", "minecraft:planks"); + ITEMS.put("minecraft:dark_oak_planks", "minecraft:planks"); + ITEMS.put("minecraft:jungle_planks", "minecraft:planks"); + ITEMS.put("minecraft:oak_planks", "minecraft:planks"); + ITEMS.put("minecraft:spruce_planks", "minecraft:planks"); + + ITEMS.put("minecraft:diorite", "minecraft:stone"); + ITEMS.put("minecraft:andesite", "minecraft:stone"); + ITEMS.put("minecraft:granite", "minecraft:stone"); + ITEMS.put("minecraft:polished_andesite", "minecraft:stone"); + ITEMS.put("minecraft:polished_diorite", "minecraft:stone"); + ITEMS.put("minecraft:polished_granite", "minecraft:stone"); + + ITEMS.put("minecraft:chiseled_tuff", "minecraft:chiseled_deepslate"); + ITEMS.put("minecraft:chiseled_tuff_bricks", "minecraft:chiseled_deepslate"); + ITEMS.put("minecraft:polished_tuff", "minecraft:polished_deepslate"); + ITEMS.put("minecraft:polished_tuff_double_slab", "minecraft:polished_deepslate_double_slab"); + ITEMS.put("minecraft:polished_tuff_slab", "minecraft:polished_deepslate_slab"); + ITEMS.put("minecraft:polished_tuff_stairs", "minecraft:polished_deepslate_stairs"); + ITEMS.put("minecraft:polished_tuff_wall", "minecraft:polished_deepslate_wall"); + ITEMS.put("minecraft:tuff_brick_double_slab", "minecraft:deepslate_brick_double_slab"); + ITEMS.put("minecraft:tuff_brick_slab", "minecraft:deepslate_brick_slab"); + ITEMS.put("minecraft:tuff_brick_stairs", "minecraft:deepslate_brick_stairs"); + ITEMS.put("minecraft:tuff_brick_wall", "minecraft:deepslate_brick_wall"); + ITEMS.put("minecraft:tuff_bricks", "minecraft:deepslate_bricks"); + ITEMS.put("minecraft:tuff_double_slab", "minecraft:cobbled_deepslate_double_slab"); + ITEMS.put("minecraft:tuff_slab", "minecraft:cobbled_deepslate_slab"); + ITEMS.put("minecraft:tuff_stairs", "minecraft:cobbled_deepslate_stairs"); + ITEMS.put("minecraft:tuff_wall", "minecraft:cobbled_deepslate_wall"); + + ITEMS.put("minecraft:chiseled_copper", "minecraft:copper_block"); + ITEMS.put("minecraft:copper_bulb", "minecraft:copper_block"); + ITEMS.put("minecraft:copper_door", "minecraft:iron_door"); + ITEMS.put("minecraft:copper_grate", "minecraft:raw_iron_block"); + ITEMS.put("minecraft:copper_trapdoor", "minecraft:iron_trapdoor"); + ITEMS.put("minecraft:exposed_chiseled_copper", "minecraft:exposed_copper"); + ITEMS.put("minecraft:exposed_copper_bulb", "minecraft:exposed_copper"); + ITEMS.put("minecraft:exposed_copper_door", "minecraft:iron_door"); + ITEMS.put("minecraft:exposed_copper_grate", "minecraft:raw_iron_block"); + ITEMS.put("minecraft:exposed_copper_trapdoor", "minecraft:iron_trapdoor"); + ITEMS.put("minecraft:oxidized_chiseled_copper", "minecraft:oxidized_copper"); + ITEMS.put("minecraft:oxidized_copper_bulb", "minecraft:oxidized_copper"); + ITEMS.put("minecraft:oxidized_copper_door", "minecraft:iron_door"); + ITEMS.put("minecraft:oxidized_copper_grate", "minecraft:raw_iron_block"); + ITEMS.put("minecraft:oxidized_copper_trapdoor", "minecraft:iron_trapdoor"); + ITEMS.put("minecraft:waxed_chiseled_copper", "minecraft:waxed_copper"); + ITEMS.put("minecraft:waxed_copper_bulb", "minecraft:waxed_copper"); + ITEMS.put("minecraft:waxed_copper_door", "minecraft:iron_door"); + ITEMS.put("minecraft:waxed_copper_grate", "minecraft:raw_iron_block"); + ITEMS.put("minecraft:waxed_copper_trapdoor", "minecraft:iron_trapdoor"); + ITEMS.put("minecraft:waxed_exposed_chiseled_copper", "minecraft:waxed_exposed_copper"); + ITEMS.put("minecraft:waxed_exposed_copper_bulb", "minecraft:waxed_exposed_copper"); + ITEMS.put("minecraft:waxed_exposed_copper_door", "minecraft:iron_door"); + ITEMS.put("minecraft:waxed_exposed_copper_grate", "minecraft:raw_iron_block"); + ITEMS.put("minecraft:waxed_exposed_copper_trapdoor", "minecraft:iron_trapdoor"); + ITEMS.put("minecraft:waxed_oxidized_chiseled_copper", "minecraft:waxed_oxidized_copper"); + ITEMS.put("minecraft:waxed_oxidized_copper_bulb", "minecraft:waxed_oxidized_copper"); + ITEMS.put("minecraft:waxed_oxidized_copper_door", "minecraft:iron_door"); + ITEMS.put("minecraft:waxed_oxidized_copper_grate", "minecraft:raw_iron_block"); + ITEMS.put("minecraft:waxed_oxidized_copper_trapdoor", "minecraft:iron_trapdoor"); + ITEMS.put("minecraft:waxed_weathered_chiseled_copper", "minecraft:waxed_weathered_copper"); + ITEMS.put("minecraft:waxed_weathered_copper_bulb", "minecraft:waxed_weathered_copper"); + ITEMS.put("minecraft:waxed_weathered_copper_door", "minecraft:iron_door"); + ITEMS.put("minecraft:waxed_weathered_copper_grate", "minecraft:raw_iron_block"); + ITEMS.put("minecraft:waxed_weathered_copper_trapdoor", "minecraft:iron_trapdoor"); + ITEMS.put("minecraft:weathered_chiseled_copper", "minecraft:weathered_copper"); + ITEMS.put("minecraft:weathered_copper_bulb", "minecraft:weathered_copper"); + ITEMS.put("minecraft:weathered_copper_door", "minecraft:iron_door"); + ITEMS.put("minecraft:weathered_copper_grate", "minecraft:raw_iron_block"); + ITEMS.put("minecraft:weathered_copper_trapdoor", "minecraft:iron_trapdoor"); + + ITEMS.put("minecraft:crafter", "minecraft:crafting_table"); + } + + static GeyserMappingItem remapItem(@SuppressWarnings("unused") Item item, GeyserMappingItem mapping) { + String replacement = ITEMS.get(mapping.getBedrockIdentifier()); + if (replacement == null) { + return mapping; + } else { + return mapping.withBedrockIdentifier(replacement); + } + } + + static NbtMap remapBlock(NbtMap tag) { + final String name = tag.getString("name"); + + String replacement; + if (NEW_STONES.contains(name) || NEW_WOODS.contains(name)) { + + String typeKey; + String type = name.substring(10); + if (NEW_STONES.contains(name)) { + replacement = "minecraft:stone"; + typeKey = "stone_type"; + if (type.startsWith("polished_")) { + type = type.substring(9) + "_smooth"; + } + } else { + replacement = "minecraft:planks"; + typeKey = "wood_type"; + type = type.substring(0, type.indexOf("_planks")); + } + + return tag.toBuilder() + .putString("name", replacement) + .putCompound("states", NbtMap.builder().putString(typeKey, type).build()) + .build(); + } else if (name.contains("tuff") && !name.equals("minecraft:tuff")) { + + if (name.contains("brick") || name.contains("polished") || name.contains("chiseled")) { + replacement = name.replace("tuff", "deepslate"); + + if (name.contains("chiseled")) { + // chiseled deepslate bricks don't exist. just use chiseled deepslate instead + replacement = replacement.replace("_bricks", ""); + } + } else { + replacement = name.replace("tuff", "cobbled_deepslate"); + } + + return tag.toBuilder() + .putString("name", replacement) + .build(); + } else if (name.contains("copper")) { + + boolean removeStates = false; + if (name.contains("chiseled")) { + replacement = name.replace("_chiseled", ""); // special chiseled + replacement = replacement.replace("chiseled_", ""); // plain chiseled + } else if (name.endsWith("bulb")) { + replacement = name.replace("_bulb", ""); + removeStates = true; + } else if (name.endsWith("grate")) { + replacement = "minecraft:raw_iron_block"; + } else if (name.endsWith("door")) { + if (name.contains("trap")) { + replacement = "minecraft:iron_trapdoor"; + } else { + replacement = "minecraft:iron_door"; + } + } else { + return tag; + } + + if (replacement.endsWith(":copper")) { + // case for plain chiseled copper and plain bulb + replacement = replacement + "_block"; + } + + NbtMapBuilder builder = tag.toBuilder(); + builder.putString("name", replacement); + if (removeStates) { + builder.putCompound("states", NbtMap.EMPTY); + } + return builder.build(); + } else if (name.equals("minecraft:crafter")) { + NbtMapBuilder builder = tag.toBuilder(); + builder.put("name", "minecraft:crafting_table"); + builder.put("states", NbtMap.EMPTY); + return builder.build(); + } + + return tag; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 5aa24de1f..74c0432b5 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -38,9 +38,6 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; -import org.cloudburstmc.protocol.bedrock.codec.v589.Bedrock_v589; -import org.cloudburstmc.protocol.bedrock.codec.v594.Bedrock_v594; -import org.cloudburstmc.protocol.bedrock.codec.v618.Bedrock_v618; import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; @@ -89,21 +86,8 @@ public class ItemRegistryPopulator { } public static void populate() { - /* - Remapper remapper630 = (item, mapping) -> { - String id = item.javaIdentifier(); - // 1.20.50 replaced stone & planks to individual stone types - // E.g.: granite, diorite, andesite, polished variants, dark_oak_planks etc - if (mapping.getBedrockIdentifier().equals("minecraft:stone") || mapping.getBedrockIdentifier().equals("minecraft:planks")) { - return mapping.withBedrockIdentifier(id); - } - - return mapping; - }; - */ - List paletteVersions = new ArrayList<>(3); - //paletteVersions.add(new PaletteVersion("1_20_40", Bedrock_v622.CODEC.getProtocolVersion(), Collections.emptyMap(), remapper618)); // NO item changes between 1.20.30 and 1.20.40 + paletteVersions.add(new PaletteVersion("1_20_40", Bedrock_v622.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion630_622::remapItem)); // NO item changes between 1.20.30 and 1.20.40 paletteVersions.add(new PaletteVersion("1_20_50", Bedrock_v630.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); @@ -371,7 +355,7 @@ public class ItemRegistryPopulator { if (customBlockItemOverride != null && customBlockData != null) { // Assuming this is a valid custom block override we'll just register it now while we have the creative item int customProtocolId = nextFreeBedrockId++; - mappingItem.setBedrockData(customProtocolId); + mappingItem = mappingItem.withBedrockData(customProtocolId); bedrockIdentifier = customBlockData.identifier(); definition = new SimpleItemDefinition(bedrockIdentifier, customProtocolId, true); registry.put(customProtocolId, definition); diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java index c1ef09b87..ab8c52bf6 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/GeyserMappingItem.java @@ -30,7 +30,6 @@ import lombok.AllArgsConstructor; import lombok.EqualsAndHashCode; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import lombok.ToString; import lombok.With; @@ -40,7 +39,6 @@ import lombok.With; @ToString @EqualsAndHashCode @Getter -@Setter @With @NoArgsConstructor @AllArgsConstructor diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index ad4b7952e..2393a6555 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit ad4b7952e997aaff144e2ce80e9552c8db93b8f1 +Subproject commit 2393a655595abd8e0b93e88553d9d8d7cdbde95b From 22009054ab572eedf22122e200890d23cdd6b30b Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Sun, 3 Dec 2023 10:03:59 -0500 Subject: [PATCH 51/86] Crafter translation --- .../geyser/inventory/CrafterContainer.java | 61 +++++++ .../updater/CrafterInventoryUpdater.java | 94 ++++++++++ .../geysermc/geyser/network/GameProtocol.java | 5 + .../geyser/network/LoggingPacketHandler.java | 7 + .../inventory/CrafterInventoryTranslator.java | 168 ++++++++++++++++++ .../inventory/InventoryTranslator.java | 1 + .../DecoratedPotBlockEntityTranslator.java | 1 - .../TrialSpawnerBlockEntityTranslator.java | 42 +++++ ...ockToggleCrafterSlotRequestTranslator.java | 48 +++++ .../inventory/JavaOpenScreenTranslator.java | 10 +- gradle/libs.versions.toml | 2 +- 11 files changed, 436 insertions(+), 3 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/inventory/CrafterContainer.java create mode 100644 core/src/main/java/org/geysermc/geyser/inventory/updater/CrafterInventoryUpdater.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/inventory/CrafterInventoryTranslator.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/level/block/entity/TrialSpawnerBlockEntityTranslator.java create mode 100644 core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockToggleCrafterSlotRequestTranslator.java diff --git a/core/src/main/java/org/geysermc/geyser/inventory/CrafterContainer.java b/core/src/main/java/org/geysermc/geyser/inventory/CrafterContainer.java new file mode 100644 index 000000000..bcacd3587 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/inventory/CrafterContainer.java @@ -0,0 +1,61 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.inventory; + +import com.github.steveice10.mc.protocol.data.game.inventory.ContainerType; +import lombok.Getter; +import lombok.Setter; +import org.geysermc.geyser.GeyserImpl; + +@Getter +public class CrafterContainer extends Container { + + @Setter + private boolean triggered = false; + + /** + * Bedrock Edition bitmask of the *disabled* slots. + * Disabled slots are 1, enabled slots are 0 - same as Java Edition + */ + private short disabledSlotsMask = 0; + + public CrafterContainer(String title, int id, int size, ContainerType containerType, PlayerInventory playerInventory) { + super(title, id, size, containerType, playerInventory); + } + + public void setSlot(int slot, boolean enabled) { + if (slot < 0 || slot > 8) { + GeyserImpl.getInstance().getLogger().warning("Crafter slot out of bounds: " + slot); + return; + } + + if (enabled) { + disabledSlotsMask = (short) (disabledSlotsMask & ~(1 << slot)); + } else { + disabledSlotsMask = (short) (disabledSlotsMask | (1 << slot)); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/inventory/updater/CrafterInventoryUpdater.java b/core/src/main/java/org/geysermc/geyser/inventory/updater/CrafterInventoryUpdater.java new file mode 100644 index 000000000..4474d420c --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/inventory/updater/CrafterInventoryUpdater.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.inventory.updater; + +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerId; +import org.cloudburstmc.protocol.bedrock.data.inventory.ItemData; +import org.cloudburstmc.protocol.bedrock.packet.InventoryContentPacket; +import org.cloudburstmc.protocol.bedrock.packet.InventorySlotPacket; +import org.geysermc.geyser.inventory.Inventory; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.inventory.CrafterInventoryTranslator; +import org.geysermc.geyser.translator.inventory.InventoryTranslator; + +import java.util.Arrays; + +/** + * Read {@link CrafterInventoryTranslator} for context on the complete custom implementation here + */ +public class CrafterInventoryUpdater extends InventoryUpdater { + + public static final CrafterInventoryUpdater INSTANCE = new CrafterInventoryUpdater(); + + @Override + public void updateInventory(InventoryTranslator translator, GeyserSession session, Inventory inventory) { + ItemData[] bedrockItems; + InventoryContentPacket contentPacket; + + // crafter grid - but excluding the result slot + bedrockItems = new ItemData[CrafterInventoryTranslator.GRID_SIZE]; + for (int i = 0; i < bedrockItems.length; i++) { + bedrockItems[translator.javaSlotToBedrock(i)] = inventory.getItem(i).getItemData(session); + } + contentPacket = new InventoryContentPacket(); + contentPacket.setContainerId(inventory.getBedrockId()); + contentPacket.setContents(Arrays.asList(bedrockItems)); + session.sendUpstreamPacket(contentPacket); + + // inventory and hotbar + bedrockItems = new ItemData[36]; + for (int i = 0; i < 36; i++) { + final int offset = i < 9 ? 27 : -9; + bedrockItems[i] = inventory.getItem(CrafterInventoryTranslator.GRID_SIZE + i + offset).getItemData(session); + } + contentPacket = new InventoryContentPacket(); + contentPacket.setContainerId(ContainerId.INVENTORY); + contentPacket.setContents(Arrays.asList(bedrockItems)); + session.sendUpstreamPacket(contentPacket); + + // Crafter result - it doesn't come after the grid, as explained elsewhere. + updateSlot(translator, session, inventory, CrafterInventoryTranslator.JAVA_RESULT_SLOT); + } + + @Override + public boolean updateSlot(InventoryTranslator translator, GeyserSession session, Inventory inventory, int javaSlot) { + int containerId; + if (javaSlot < CrafterInventoryTranslator.GRID_SIZE || javaSlot == CrafterInventoryTranslator.JAVA_RESULT_SLOT) { + // Parts of the Crafter UI + // It doesn't seem like BDS sends the result slot, but sending it as slot 50 does actually work (it doesn't seem to show otherwise) + containerId = inventory.getBedrockId(); + } else { + containerId = ContainerId.INVENTORY; + } + + InventorySlotPacket packet = new InventorySlotPacket(); + packet.setContainerId(containerId); + packet.setSlot(translator.javaSlotToBedrock(javaSlot)); + packet.setItem(inventory.getItem(javaSlot).getItemData(session)); + session.sendUpstreamPacket(packet); + return true; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index e22d1da97..c811afd2e 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -32,6 +32,7 @@ import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; +import org.geysermc.geyser.session.GeyserSession; import java.util.ArrayList; import java.util.List; @@ -81,6 +82,10 @@ public final class GameProtocol { /* Bedrock convenience methods to gatekeep features and easily remove the check on version removal */ + public static boolean isPre1_20_50(GeyserSession session) { + return session.getUpstream().getProtocolVersion() < Bedrock_v630.CODEC.getProtocolVersion(); + } + /** * Gets the {@link PacketCodec} for Minecraft: Java Edition. * diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index 80e624895..5076dbeb2 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -869,4 +869,11 @@ public class LoggingPacketHandler implements BedrockPacketHandler { public PacketSignal handle(RequestNetworkSettingsPacket packet) { return defaultHandler(packet); } + + // todo: fix arrangement + + @Override + public PacketSignal handle(ToggleCrafterSlotRequestPacket packet) { + return defaultHandler(packet); + } } \ No newline at end of file diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/CrafterInventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/CrafterInventoryTranslator.java new file mode 100644 index 000000000..97398a207 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/CrafterInventoryTranslator.java @@ -0,0 +1,168 @@ +/* + * Copyright (c) 2019-2022 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.inventory; + +import com.github.steveice10.mc.protocol.data.game.inventory.ContainerType; +import org.cloudburstmc.nbt.NbtMap; +import org.cloudburstmc.nbt.NbtMapBuilder; +import org.cloudburstmc.protocol.bedrock.data.inventory.ContainerSlotType; +import org.cloudburstmc.protocol.bedrock.data.inventory.itemstack.request.ItemStackRequestSlotData; +import org.geysermc.geyser.inventory.BedrockContainerSlot; +import org.geysermc.geyser.inventory.CrafterContainer; +import org.geysermc.geyser.inventory.Inventory; +import org.geysermc.geyser.inventory.PlayerInventory; +import org.geysermc.geyser.inventory.SlotType; +import org.geysermc.geyser.inventory.updater.CrafterInventoryUpdater; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.util.BlockEntityUtils; + +/** + * Translates the Crafter. Most important thing to know about this class is that + * the result slot comes after the 3x3 grid AND the inventory. This means that the total size of the Crafter (10) + * cannot be used to calculate the inventory slot indices. The Translator and the Updater must then + * override any methods that use the size for such calculations + */ +public class CrafterInventoryTranslator extends AbstractBlockInventoryTranslator { + + public static final int JAVA_RESULT_SLOT = 45; + public static final int BEDROCK_RESULT_SLOT = 50; + public static final int GRID_SIZE = 9; + + // Properties + private static final int SLOT_ENABLED = 0; // enabled slot value + private static final int TRIGGERED_KEY = 9; // key of triggered state + private static final int TRIGGERED = 1; // triggered value + + public CrafterInventoryTranslator() { + super(10, "minecraft:crafter", org.cloudburstmc.protocol.bedrock.data.inventory.ContainerType.CRAFTER, CrafterInventoryUpdater.INSTANCE); + } + + @Override + public void updateProperty(GeyserSession session, Inventory inventory, int key, int value) { + // the slot bits and triggered state are sent here rather than in a BlockEntityDataPacket. Yippee. + CrafterContainer container = (CrafterContainer) inventory; + + if (key == TRIGGERED_KEY) { + container.setTriggered(value == TRIGGERED); + } else { + // enabling and disabling slots of the 3x3 grid + container.setSlot(key, value == SLOT_ENABLED); + } + + // Unfortunately this will be called 10 times when a Crafter is opened + // Kind of unavoidable because it must be invoked anytime an individual property is updated + updateBlockEntity(session, container); + } + + @Override + public int bedrockSlotToJava(ItemStackRequestSlotData slotInfoData) { + int slot = slotInfoData.getSlot(); + switch (slotInfoData.getContainer()) { + case HOTBAR_AND_INVENTORY, HOTBAR, INVENTORY -> { + //hotbar + if (slot >= 9) { + return slot + GRID_SIZE - 9; + } else { + return slot + GRID_SIZE + 27; + } + } + } + return slot; + } + + @Override + public int javaSlotToBedrock(int slot) { + if (slot == JAVA_RESULT_SLOT) { + return BEDROCK_RESULT_SLOT; + } + + // grid slots 0-8 + if (slot < GRID_SIZE) { + return slot; + } + + // inventory and hotbar + final int tmp = slot - GRID_SIZE; + if (tmp < 27) { + return tmp + 9; + } else { + return tmp - 27; + } + } + + @Override + public BedrockContainerSlot javaSlotToBedrockContainer(int javaSlot) { + if (javaSlot == JAVA_RESULT_SLOT) { + return new BedrockContainerSlot(ContainerSlotType.CRAFTER_BLOCK_CONTAINER, BEDROCK_RESULT_SLOT); + } + + // grid slots 0-8 + if (javaSlot < GRID_SIZE) { + return new BedrockContainerSlot(ContainerSlotType.LEVEL_ENTITY, javaSlot); + } + + // inventory and hotbar + final int tmp = javaSlot - GRID_SIZE; + if (tmp < 27) { + return new BedrockContainerSlot(ContainerSlotType.INVENTORY, tmp + 9); + } else { + return new BedrockContainerSlot(ContainerSlotType.HOTBAR, tmp - 27); + } + } + + @Override + public SlotType getSlotType(int javaSlot) { + if (javaSlot == JAVA_RESULT_SLOT) { + return SlotType.OUTPUT; + } + return SlotType.NORMAL; + } + + @Override + public Inventory createInventory(String name, int windowId, ContainerType containerType, PlayerInventory playerInventory) { + // Java sends the triggered and slot bits incrementally through properties, which we store here + return new CrafterContainer(name, windowId, this.size, containerType, playerInventory); + } + + private static void updateBlockEntity(GeyserSession session, CrafterContainer container) { + /* + Here is an example of the tag sent by BDS 1.20.50.24 + It doesn't include the position or the block entity ID in the tag, for whatever reason. + + CLIENT BOUND BlockEntityDataPacket(blockPosition=(8, 110, 45), data={ + "crafting_ticks_remaining": 0i, + "disabled_slots": 511s + }) + */ + + NbtMapBuilder tag = NbtMap.builder(); + // just send some large amount since we don't know, and it'll be resent as 0 when java updates as not triggered + tag.putInt("crafting_ticks_remaining", container.isTriggered() ? 10_000 : 0); + tag.putShort("disabled_slots", container.getDisabledSlotsMask()); + + BlockEntityUtils.updateBlockEntity(session, tag.build(), container.getHolderPosition()); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java index 5262f048b..b10fa85f0 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java @@ -86,6 +86,7 @@ public abstract class InventoryTranslator { put(ContainerType.BEACON, new BeaconInventoryTranslator()); put(ContainerType.BREWING_STAND, new BrewingInventoryTranslator()); put(ContainerType.CARTOGRAPHY, new CartographyInventoryTranslator()); + put(ContainerType.CRAFTER_3x3, new CrafterInventoryTranslator()); put(ContainerType.CRAFTING, new CraftingInventoryTranslator()); put(ContainerType.ENCHANTMENT, new EnchantingInventoryTranslator()); put(ContainerType.HOPPER, new HopperInventoryTranslator()); diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DecoratedPotBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DecoratedPotBlockEntityTranslator.java index 9ff864101..1774d9c76 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DecoratedPotBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/DecoratedPotBlockEntityTranslator.java @@ -44,7 +44,6 @@ public class DecoratedPotBlockEntityTranslator extends BlockEntityTranslator { if (tag == null) { return; } - // todo 1.20.3 maybe // exact same format if (tag.get("sherds") instanceof ListTag sherds) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/TrialSpawnerBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/TrialSpawnerBlockEntityTranslator.java new file mode 100644 index 000000000..93a4daba9 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/TrialSpawnerBlockEntityTranslator.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.level.block.entity; + +import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityType; +import com.github.steveice10.opennbt.tag.builtin.CompoundTag; +import org.cloudburstmc.nbt.NbtMapBuilder; + +@BlockEntity(type = BlockEntityType.TRIAL_SPAWNER) +public class TrialSpawnerBlockEntityTranslator extends SpawnerBlockEntityTranslator { + + @Override + public void translateTag(NbtMapBuilder builder, CompoundTag tag, int blockState) { + if (tag != null) { + // todo 1.20.3 doesn't seem to work + super.translateTag(builder, tag, blockState); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockToggleCrafterSlotRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockToggleCrafterSlotRequestTranslator.java new file mode 100644 index 000000000..5c494cd88 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockToggleCrafterSlotRequestTranslator.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.translator.protocol.bedrock; + +import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundContainerSlotStateChangedPacket; +import org.cloudburstmc.protocol.bedrock.packet.ToggleCrafterSlotRequestPacket; +import org.geysermc.geyser.inventory.CrafterContainer; +import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.translator.protocol.PacketTranslator; +import org.geysermc.geyser.translator.protocol.Translator; + +@Translator(packet = ToggleCrafterSlotRequestPacket.class) +public class BedrockToggleCrafterSlotRequestTranslator extends PacketTranslator { + + @Override + public void translate(GeyserSession session, ToggleCrafterSlotRequestPacket packet) { + if (!(session.getOpenInventory() instanceof CrafterContainer container)) { + return; + } + + // Note that the Bedrock packet uses disabled, whereas the java packet used enabled. + session.sendDownstreamGamePacket( + new ServerboundContainerSlotStateChangedPacket(packet.getSlot(), container.getJavaId(), !packet.isDisabled())); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java index 8951f7171..1d0b4bf63 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/inventory/JavaOpenScreenTranslator.java @@ -30,7 +30,9 @@ import com.github.steveice10.mc.protocol.packet.ingame.clientbound.inventory.Cli import com.github.steveice10.mc.protocol.packet.ingame.serverbound.inventory.ServerboundContainerClosePacket; import net.kyori.adventure.text.Component; import org.geysermc.geyser.inventory.Inventory; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.session.GeyserSession; +import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.translator.inventory.InventoryTranslator; import org.geysermc.geyser.translator.inventory.OldSmithingTableTranslator; import org.geysermc.geyser.translator.protocol.PacketTranslator; @@ -49,12 +51,18 @@ public class JavaOpenScreenTranslator extends PacketTranslator Date: Wed, 13 Dec 2023 00:48:03 -0500 Subject: [PATCH 52/86] translate trial spawners, cleanup --- .../entity/SpawnerBlockEntityTranslator.java | 40 +++++++++++-------- .../TrialSpawnerBlockEntityTranslator.java | 13 ++++-- .../java/level/JavaBlockEventTranslator.java | 9 ----- .../java/level/JavaGameEventTranslator.java | 8 ++-- gradle/libs.versions.toml | 2 +- 5 files changed, 38 insertions(+), 34 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java index 0aa8af279..f2b0f5a78 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/SpawnerBlockEntityTranslator.java @@ -29,6 +29,8 @@ import com.github.steveice10.mc.protocol.data.game.level.block.BlockEntityType; import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import com.github.steveice10.opennbt.tag.builtin.StringTag; import com.github.steveice10.opennbt.tag.builtin.Tag; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3i; import org.cloudburstmc.nbt.NbtMap; import org.cloudburstmc.nbt.NbtMapBuilder; @@ -99,24 +101,28 @@ public class SpawnerBlockEntityTranslator extends BlockEntityTranslator { builder.put("MinSpawnDelay", current.getValue()); } - CompoundTag spawnData = tag.get("SpawnData"); - if (spawnData != null) { - CompoundTag entityTag = spawnData.get("entity"); - if (entityTag.get("id") instanceof StringTag idTag) { - // As of 1.19.3, spawners can be empty - String entityId = idTag.getValue(); - builder.put("EntityIdentifier", entityId); + translateSpawnData(builder, tag.get("SpawnData")); - EntityDefinition definition = Registries.JAVA_ENTITY_IDENTIFIERS.get(entityId); - if (definition != null) { - builder.put("DisplayEntityWidth", definition.width()); - builder.put("DisplayEntityHeight", definition.height()); - builder.put("DisplayEntityScale", 1.0f); - } - } - } - - builder.put("id", "MobSpawner"); builder.put("isMovable", (byte) 1); } + + static void translateSpawnData(@NonNull NbtMapBuilder builder, @Nullable CompoundTag spawnData) { + if (spawnData == null) { + return; + } + + CompoundTag entityTag = spawnData.get("entity"); + if (entityTag.get("id") instanceof StringTag idTag) { + // As of 1.19.3, spawners can be empty + String entityId = idTag.getValue(); + builder.put("EntityIdentifier", entityId); + + EntityDefinition definition = Registries.JAVA_ENTITY_IDENTIFIERS.get(entityId); + if (definition != null) { + builder.put("DisplayEntityWidth", definition.width()); + builder.put("DisplayEntityHeight", definition.height()); + builder.put("DisplayEntityScale", 1.0f); + } + } + } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/TrialSpawnerBlockEntityTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/TrialSpawnerBlockEntityTranslator.java index 93a4daba9..a6a99d868 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/TrialSpawnerBlockEntityTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/level/block/entity/TrialSpawnerBlockEntityTranslator.java @@ -30,13 +30,18 @@ import com.github.steveice10.opennbt.tag.builtin.CompoundTag; import org.cloudburstmc.nbt.NbtMapBuilder; @BlockEntity(type = BlockEntityType.TRIAL_SPAWNER) -public class TrialSpawnerBlockEntityTranslator extends SpawnerBlockEntityTranslator { +public class TrialSpawnerBlockEntityTranslator extends BlockEntityTranslator { @Override public void translateTag(NbtMapBuilder builder, CompoundTag tag, int blockState) { - if (tag != null) { - // todo 1.20.3 doesn't seem to work - super.translateTag(builder, tag, blockState); + if (tag == null) { + return; } + + // trial spawners have "spawn_data" instead of "SpawnData" + SpawnerBlockEntityTranslator.translateSpawnData(builder, tag.get("spawn_data")); + + // Because trial spawners don't exist on bedrock yet + builder.put("id", "MobSpawner"); } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java index 49c54409b..28fd2401b 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaBlockEventTranslator.java @@ -33,7 +33,6 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.protocol.bedrock.packet.BlockEntityDataPacket; import org.cloudburstmc.protocol.bedrock.packet.BlockEventPacket; import it.unimi.dsi.fastutil.objects.Object2IntMaps; -import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.level.block.BlockStateValues; import org.geysermc.geyser.level.physics.Direction; @@ -128,14 +127,6 @@ public class JavaBlockEventTranslator extends PacketTranslator Date: Thu, 14 Dec 2023 15:22:40 -0500 Subject: [PATCH 53/86] cleanup --- README.md | 2 +- .../main/java/org/geysermc/geyser/network/GameProtocol.java | 4 +++- .../geyser/registry/populator/Conversion630_622.java | 2 +- .../geyser/registry/populator/ItemRegistryPopulator.java | 2 +- .../protocol/java/level/JavaLevelEventTranslator.java | 2 +- .../protocol/java/scoreboard/JavaSetScoreTranslator.java | 5 +++-- 6 files changed, 10 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1663c493a..bdd8cbe98 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! -### Currently supporting Minecraft Bedrock 1.20.40 - 1.20.50 and Minecraft Java 1.20.3 +### Currently supporting Minecraft Bedrock 1.20.40 - 1.20.51 and Minecraft Java 1.20.4 ## Setting Up Take a look [here](https://wiki.geysermc.org/geyser/setup/) for how to set up Geyser. diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index c811afd2e..42cce607b 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -63,7 +63,9 @@ public final class GameProtocol { SUPPORTED_BEDROCK_CODECS.add(Bedrock_v622.CODEC.toBuilder() .minecraftVersion("1.20.40/1.20.41") .build()); - SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC); + SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() + .minecraftVersion("1.20.50/1.20.51") + .build()); } /** diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_622.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_622.java index 9404774b8..7c1453dc7 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_622.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_622.java @@ -37,7 +37,7 @@ import java.util.Map; /** * Backwards-maps the blocks and items of 1.20.50 (630) to 1.20.40 (622) */ -public class Conversion630_622 { +class Conversion630_622 { private static final List NEW_STONES = List.of("minecraft:stone", "minecraft:granite", "minecraft:polished_granite", "minecraft:diorite", "minecraft:polished_diorite", "minecraft:andesite", "minecraft:polished_andesite"); private static final List NEW_WOODS = List.of("minecraft:oak_planks", "minecraft:spruce_planks", "minecraft:birch_planks", "minecraft:jungle_planks", "minecraft:acacia_planks", "minecraft:dark_oak_planks"); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index 74c0432b5..bc2cf4a43 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -87,7 +87,7 @@ public class ItemRegistryPopulator { public static void populate() { List paletteVersions = new ArrayList<>(3); - paletteVersions.add(new PaletteVersion("1_20_40", Bedrock_v622.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion630_622::remapItem)); // NO item changes between 1.20.30 and 1.20.40 + paletteVersions.add(new PaletteVersion("1_20_40", Bedrock_v622.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion630_622::remapItem)); paletteVersions.add(new PaletteVersion("1_20_50", Bedrock_v630.CODEC.getProtocolVersion())); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java index 64d530a1f..843f3d514 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelEventTranslator.java @@ -336,7 +336,7 @@ public class JavaLevelEventTranslator extends PacketTranslator { - GeyserImpl.getInstance().getLogger().warning("Unhandled level event: " + packet.getEvent()); + GeyserImpl.getInstance().getLogger().debug("Unhandled level event: " + packet.getEvent()); return; } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java index 362fb29e8..594e2cbed 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/scoreboard/JavaSetScoreTranslator.java @@ -27,6 +27,7 @@ package org.geysermc.geyser.translator.protocol.java.scoreboard; import com.github.steveice10.mc.protocol.data.game.scoreboard.ScoreboardPosition; import com.github.steveice10.mc.protocol.packet.ingame.clientbound.scoreboard.ClientboundSetScorePacket; +import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; import org.geysermc.geyser.GeyserImpl; @@ -86,7 +87,7 @@ public class JavaSetScoreTranslator extends PacketTranslator Date: Thu, 14 Dec 2023 16:30:50 -0500 Subject: [PATCH 54/86] fabric: require 1.20.4 as ViaFabric doesn't support 1.20.2 --- bootstrap/fabric/build.gradle.kts | 2 +- gradle/libs.versions.toml | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bootstrap/fabric/build.gradle.kts b/bootstrap/fabric/build.gradle.kts index 83d6a48d0..ea1fef2b7 100644 --- a/bootstrap/fabric/build.gradle.kts +++ b/bootstrap/fabric/build.gradle.kts @@ -119,7 +119,7 @@ modrinth { syncBodyFrom.set(rootProject.file("README.md").readText()) uploadFile.set(tasks.getByPath("remapModrinthJar")) - gameVersions.addAll("1.20.3") + gameVersions.addAll("1.20.4") loaders.add("fabric") failSilently.set(true) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 4db6a03a2..eb1008cd3 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ protocol-connection = "3.0.0.Beta1-20231107.190703-112" raknet = "1.0.0.CR1-20230703.195238-9" blockstateupdater="1.20.50-20231106.161340-1" mcauthlib = "d9d773e" -mcprotocollib = "7123bf9" +mcprotocollib = "723fbb3" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" @@ -28,9 +28,9 @@ adapters = "1.10-SNAPSHOT" commodore = "2.2" bungeecord = "a7c6ede" velocity = "3.1.1" -fabric-minecraft = "1.20.2" -fabric-loader = "0.14.21" -fabric-api = "0.89.0+1.20.2" +fabric-minecraft = "1.20.4" +fabric-loader = "0.15.2" +fabric-api = "0.91.2+1.20.4" [libraries] base-api = { group = "org.geysermc.api", name = "base-api", version.ref = "base-api" } From a13492e0ed4434670d6be354b7fb25340a5b18d3 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Thu, 14 Dec 2023 17:08:34 -0500 Subject: [PATCH 55/86] Final 1.20.4 cleanup --- .../geyser/platform/bungeecord/GeyserBungeePlugin.java | 2 +- bootstrap/fabric/src/main/resources/fabric.mod.json | 4 ++-- .../geyser/translator/inventory/InventoryTranslator.java | 2 +- core/src/main/resources/mappings | 2 +- gradle/libs.versions.toml | 4 ++-- 5 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java index c4eea66b8..c5d5cdacc 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java @@ -80,7 +80,7 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { // Copied from ViaVersion. // https://github.com/ViaVersion/ViaVersion/blob/b8072aad86695cc8ec6f5e4103e43baf3abf6cc5/bungee/src/main/java/us/myles/ViaVersion/BungeePlugin.java#L43 try { - ProtocolConstants.class.getField("MINECRAFT_1_20_2"); + ProtocolConstants.class.getField("MINECRAFT_1_20_3"); } catch (NoSuchFieldException e) { getLogger().warning(" / \\"); getLogger().warning(" / \\"); diff --git a/bootstrap/fabric/src/main/resources/fabric.mod.json b/bootstrap/fabric/src/main/resources/fabric.mod.json index f401e8f23..a192109e2 100644 --- a/bootstrap/fabric/src/main/resources/fabric.mod.json +++ b/bootstrap/fabric/src/main/resources/fabric.mod.json @@ -23,9 +23,9 @@ "geyser-fabric.mixins.json" ], "depends": { - "fabricloader": ">=0.14.21", + "fabricloader": ">=0.15.2", "fabric": "*", - "minecraft": ">=1.20.2", + "minecraft": ">=1.20.4", "fabric-permissions-api-v0": "*" } } diff --git a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java index b10fa85f0..95ec99412 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/inventory/InventoryTranslator.java @@ -86,7 +86,7 @@ public abstract class InventoryTranslator { put(ContainerType.BEACON, new BeaconInventoryTranslator()); put(ContainerType.BREWING_STAND, new BrewingInventoryTranslator()); put(ContainerType.CARTOGRAPHY, new CartographyInventoryTranslator()); - put(ContainerType.CRAFTER_3x3, new CrafterInventoryTranslator()); + //put(ContainerType.CRAFTER_3x3, new CrafterInventoryTranslator()); todo Output slot is currently broken put(ContainerType.CRAFTING, new CraftingInventoryTranslator()); put(ContainerType.ENCHANTMENT, new EnchantingInventoryTranslator()); put(ContainerType.HOPPER, new HopperInventoryTranslator()); diff --git a/core/src/main/resources/mappings b/core/src/main/resources/mappings index 2393a6555..522967d6e 160000 --- a/core/src/main/resources/mappings +++ b/core/src/main/resources/mappings @@ -1 +1 @@ -Subproject commit 2393a655595abd8e0b93e88553d9d8d7cdbde95b +Subproject commit 522967d6ee76972994ad05a992dc9d7bb4e889ba diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index eb1008cd3..71d416f72 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ protocol-connection = "3.0.0.Beta1-20231107.190703-112" raknet = "1.0.0.CR1-20230703.195238-9" blockstateupdater="1.20.50-20231106.161340-1" mcauthlib = "d9d773e" -mcprotocollib = "723fbb3" +mcprotocollib = "1.20.4-1-20231214.212857-1" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" @@ -87,7 +87,7 @@ guava = { group = "com.google.guava", name = "guava", version.ref = "guava" } gson = { group = "com.google.code.gson", name = "gson", version.ref = "gson" } junit = { group = "org.junit.jupiter", name = "junit-jupiter", version.ref = "junit" } mcauthlib = { group = "com.github.GeyserMC", name = "MCAuthLib", version.ref = "mcauthlib" } -mcprotocollib = { group = "com.github.GeyserMC", name = "MCProtocolLib", version.ref = "mcprotocollib" } +mcprotocollib = { group = "com.github.steveice10", name = "mcprotocollib", version.ref = "mcprotocollib" } raknet = { group = "org.cloudburstmc.netty", name = "netty-transport-raknet", version.ref = "raknet" } terminalconsoleappender = { group = "net.minecrell", name = "terminalconsoleappender", version.ref = "terminalconsoleappender" } velocity-api = { group = "com.velocitypowered", name = "velocity-api", version.ref = "velocity" } From aaf38f46fb32c4aaf984b535d5dcc593bdab7390 Mon Sep 17 00:00:00 2001 From: Kas-tle <26531652+Kas-tle@users.noreply.github.com> Date: Thu, 14 Dec 2023 17:47:00 -0800 Subject: [PATCH 56/86] Target Java 17 --- bootstrap/fabric/build.gradle.kts | 6 ------ .../src/main/kotlin/geyser.base-conventions.gradle.kts | 2 +- build.gradle.kts | 2 +- 3 files changed, 2 insertions(+), 8 deletions(-) diff --git a/bootstrap/fabric/build.gradle.kts b/bootstrap/fabric/build.gradle.kts index ea1fef2b7..66af130b3 100644 --- a/bootstrap/fabric/build.gradle.kts +++ b/bootstrap/fabric/build.gradle.kts @@ -5,12 +5,6 @@ plugins { id("com.modrinth.minotaur") version "2.+" } -indra { - javaVersions { - target(17) - } -} - dependencies { //to change the versions see the gradle.properties file minecraft(libs.fabric.minecraft) diff --git a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts index 95d4d5409..01c769733 100644 --- a/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts +++ b/build-logic/src/main/kotlin/geyser.base-conventions.gradle.kts @@ -16,7 +16,7 @@ indra { mitLicense() javaVersions { - target(16) + target(17) } } diff --git a/build.gradle.kts b/build.gradle.kts index d7360b701..a72b8a484 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ allprojects { java { toolchain { - languageVersion.set(JavaLanguageVersion.of(16)) + languageVersion.set(JavaLanguageVersion.of(17)) } } From 6e56666be2dec365125e5a1eca76aa26efec6ee0 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Fri, 15 Dec 2023 00:31:51 -0500 Subject: [PATCH 57/86] Update spigot adapters to include 1.20.4 (#4340) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 71d416f72..0974f7b81 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -24,7 +24,7 @@ jline = "3.21.0" terminalconsoleappender = "1.2.0" folia = "1.19.4-R0.1-SNAPSHOT" viaversion = "4.0.0" -adapters = "1.10-SNAPSHOT" +adapters = "1.11-SNAPSHOT" commodore = "2.2" bungeecord = "a7c6ede" velocity = "3.1.1" From 58ff00db961641164411564fe1c6d9406750f991 Mon Sep 17 00:00:00 2001 From: Tim203 Date: Sat, 16 Dec 2023 23:42:59 +0100 Subject: [PATCH 58/86] Fixed an issue where there would be a null score in SetScorePacket --- .../java/org/geysermc/geyser/scoreboard/Scoreboard.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java index 1e0ea5eb1..216370bde 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/Scoreboard.java @@ -258,7 +258,12 @@ public final class Scoreboard { for (Score score : objective.getScores().values()) { if (score.getUpdateType() == REMOVE) { - removeScores.add(score.getCachedInfo()); + ScoreInfo cachedInfo = score.getCachedInfo(); + // cachedInfo can be null here when ScoreboardUpdater is being used and a score is added and + // removed before a single update cycle is performed + if (cachedInfo != null) { + removeScores.add(cachedInfo); + } // score is pending to be removed, so we can remove it from the objective objective.removeScore0(score.getName()); break; From af83e9269d7a4a166f3d682419259da549a7c194 Mon Sep 17 00:00:00 2001 From: Konicai <71294714+Konicai@users.noreply.github.com> Date: Tue, 19 Dec 2023 02:57:34 -0500 Subject: [PATCH 59/86] Fix (de)serialization of ClientboundExplodePacket (#4351) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 0974f7b81..dd4c133ad 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ protocol-connection = "3.0.0.Beta1-20231107.190703-112" raknet = "1.0.0.CR1-20230703.195238-9" blockstateupdater="1.20.50-20231106.161340-1" mcauthlib = "d9d773e" -mcprotocollib = "1.20.4-1-20231214.212857-1" +mcprotocollib = "1.20.4-2-20231219.074138-2" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From f3e56d282ebcb4fa298a8cb2c3696ee013d1a9d5 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 20 Dec 2023 16:35:48 +0100 Subject: [PATCH 60/86] Gracefully fail on older spigot builds due to outdated netty (#4355) * Test for outdated netty to avoid https://github.com/GeyserMC/Geyser/issues/3814 * capitalization * bad spigot, go paper --- .../geyser/platform/spigot/GeyserSpigotPlugin.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java index 02ea91cf2..62a1e3f02 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java @@ -135,6 +135,17 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { } } + try { + Class.forName("io.netty.util.internal.ObjectPool.ObjectCreator"); + } catch (ClassNotFoundException e) { + getLogger().severe("*********************************************"); + getLogger().severe(""); + getLogger().severe("This version of Spigot is using an outdated version of netty. Please use Paper instead!"); + getLogger().severe(""); + getLogger().severe("*********************************************"); + return; + } + // This is manually done instead of using Bukkit methods to save the config because otherwise comments get removed try { if (!getDataFolder().exists()) { From 32a8573651c3d600ab05e21c1f92a4cea6899e4e Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 20 Dec 2023 17:59:51 +0100 Subject: [PATCH 61/86] Fix broken netty util class check (#4357) --- .../org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java index 62a1e3f02..a2a08c3bf 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java @@ -136,7 +136,7 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { } try { - Class.forName("io.netty.util.internal.ObjectPool.ObjectCreator"); + Class.forName("io.netty.util.internal.ObjectPool$ObjectCreator"); } catch (ClassNotFoundException e) { getLogger().severe("*********************************************"); getLogger().severe(""); From cdb8ab344cfda20a37994d5dd59cf692cdd786d4 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 20 Dec 2023 23:48:51 +0100 Subject: [PATCH 62/86] bump cloudburst/netty dependencies (#4354) * bump cloudburst's netty-transport-raknet * bump cloudburst protocol/codec/connection bump bump netty due CVE-2022-41881 Changes in cloudburst libs: - uses netty 4.1.101.Final - bumps netty-transport-raknet which fixes https://github.com/CloudburstMC/Network/pull/36, an issue where some connection attempts did not work --- gradle/libs.versions.toml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index dd4c133ad..c71aa715f 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -5,13 +5,13 @@ erosion = "1.0-20230406.174837-8" events = "1.1-SNAPSHOT" jackson = { strictly = "2.14.0" } # Don't let other dependencies override fastutil = "8.5.2" -netty = "4.1.80.Final" +netty = "4.1.103.Final" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol = "3.0.0.Beta1-20231107.190703-113" -protocol-connection = "3.0.0.Beta1-20231107.190703-112" -raknet = "1.0.0.CR1-20230703.195238-9" +protocol = "3.0.0.Beta1-20231206.150507-114" +protocol-connection = "3.0.0.Beta1-20231206.150507-113" +raknet = "1.0.0.CR1-20231206.145325-12" blockstateupdater="1.20.50-20231106.161340-1" mcauthlib = "d9d773e" mcprotocollib = "1.20.4-2-20231219.074138-2" From b0ccf45cd47f797eca2f62e5716170bc80074b86 Mon Sep 17 00:00:00 2001 From: Kas-tle <26531652+Kas-tle@users.noreply.github.com> Date: Sat, 23 Dec 2023 18:06:06 -0800 Subject: [PATCH 63/86] Closes GeyserMC/Geyser#4358 (#4360) Signed-off-by: Joshua Castle <26531652+Kas-tle@users.noreply.github.com> --- .../geyser/level/block/BlockStateValues.java | 15 +++++++++++++++ .../java/org/geysermc/geyser/util/ChunkUtils.java | 8 ++++++++ 2 files changed, 23 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java b/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java index 11702e78a..e665a22ef 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/BlockStateValues.java @@ -67,6 +67,7 @@ public final class BlockStateValues { private static final Int2IntMap SKULL_WALL_DIRECTIONS = new Int2IntOpenHashMap(); private static final Int2ByteMap SHULKERBOX_DIRECTIONS = new FixedInt2ByteMap(); private static final Int2IntMap WATER_LEVEL = new Int2IntOpenHashMap(); + private static final IntSet UPPER_DOORS = new IntOpenHashSet(); public static final int JAVA_AIR_ID = 0; @@ -219,6 +220,10 @@ public final class BlockStateValues { if (javaId.contains("_cauldron") && !javaId.contains("water_")) { NON_WATER_CAULDRONS.add(javaBlockState); } + + if (javaId.contains("_door[") && javaId.contains("half=upper")) { + UPPER_DOORS.add(javaBlockState); + } } /** @@ -498,6 +503,16 @@ public final class BlockStateValues { return WATER_LEVEL.getOrDefault(state, -1); } + /** + * Check if a block is the upper half of a door. + * + * @param state BlockState of the block + * @return True if the block is the upper half of a door + */ + public static boolean isUpperDoor(int state) { + return UPPER_DOORS.contains(state); + } + /** * Get the height of water from the block state * This is used in FishingHookEntity to create splash sounds when the hook hits the water. In addition, diff --git a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java index 114a7b6de..cc21e2d0a 100644 --- a/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/ChunkUtils.java @@ -215,6 +215,14 @@ public class ChunkUtils { break; //No block will be a part of two classes } } + + if (BlockStateValues.isUpperDoor(blockState)) { + // Update the lower door block as Bedrock client doesn't like door to be closed from the top + // See https://github.com/GeyserMC/Geyser/issues/4358 + Vector3i belowDoorPosition = position.sub(0, 1, 0); + int belowDoorBlockState = session.getGeyser().getWorldManager().getBlockAt(session, belowDoorPosition.getX(), belowDoorPosition.getY(), belowDoorPosition.getZ()); + updateBlock(session, belowDoorBlockState, belowDoorPosition); + } } public static void sendEmptyChunk(GeyserSession session, int chunkX, int chunkZ, boolean forceUpdate) { From 592a58a0c87bf0054610f5a7ec996e65f1c0c402 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 25 Dec 2023 20:43:13 +0100 Subject: [PATCH 64/86] Use uuid for bukkit api permission checks (#4363) * lookup players by uuid instead of name * Fix: look up Players by UUID for permissions, dont throw if a player can't be found (e.g. disconnected) * use api method --- .../spigot/world/manager/GeyserSpigotWorldManager.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java index 74f359e02..42f0d17f4 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/world/manager/GeyserSpigotWorldManager.java @@ -197,7 +197,11 @@ public class GeyserSpigotWorldManager extends WorldManager { @Override public boolean hasPermission(GeyserSession session, String permission) { - return Objects.requireNonNull(Bukkit.getPlayer(session.getPlayerEntity().getUsername())).hasPermission(permission); + Player player = Bukkit.getPlayer(session.javaUuid()); + if (player != null) { + return player.hasPermission(permission); + } + return false; } @Override From 46bde0c01955cddc5b0da547f76629583f568ca4 Mon Sep 17 00:00:00 2001 From: chris Date: Sun, 31 Dec 2023 02:24:44 +0100 Subject: [PATCH 65/86] Fix: protocol being null during online mode login (#4369) * fix: protocol being null during online mode login * gimme more space * add debug logging for too early downstream packet sending --- .../java/org/geysermc/geyser/session/GeyserSession.java | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 28ad5887c..26e206458 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -1633,6 +1633,15 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { * @param intendedState the state the client should be in */ public void sendDownstreamPacket(Packet packet, ProtocolState intendedState) { + // protocol can be null when we're not yet logged in (online auth) + if (protocol == null) { + if (geyser.getConfig().isDebugMode()) { + geyser.getLogger().debug("Tried to send downstream packet with no downstream session!"); + Thread.dumpStack(); + } + return; + } + if (protocol.getState() != intendedState) { geyser.getLogger().debug("Tried to send " + packet.getClass().getSimpleName() + " packet while not in " + intendedState.name() + " state"); return; From 7613bdbafe402f86ec8f1bd7a446b2a1d6b86305 Mon Sep 17 00:00:00 2001 From: Camotoy <20743703+Camotoy@users.noreply.github.com> Date: Thu, 4 Jan 2024 13:49:01 -0500 Subject: [PATCH 66/86] Fix https://github.com/GeyserMC/Geyser/issues/4378 --- .../org/geysermc/geyser/network/UpstreamPacketHandler.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index a0b104adb..7a22b8a42 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -28,6 +28,8 @@ package org.geysermc.geyser.network; import io.netty.buffer.Unpooled; import org.cloudburstmc.protocol.bedrock.BedrockDisconnectReasons; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; +import org.cloudburstmc.protocol.bedrock.codec.compat.BedrockCompat; +import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.data.ExperimentData; import org.cloudburstmc.protocol.bedrock.data.PacketCompressionAlgorithm; import org.cloudburstmc.protocol.bedrock.data.ResourcePackType; @@ -108,6 +110,10 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { session.disconnect(disconnectMessage); return false; } else if (protocolVersion < GameProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()) { + if (protocolVersion < Bedrock_v622.CODEC.getProtocolVersion()) { + // https://github.com/GeyserMC/Geyser/issues/4378 + session.getUpstream().getSession().setCodec(BedrockCompat.CODEC_LEGACY); + } session.disconnect(GeyserLocale.getLocaleStringLog("geyser.network.outdated.client", supportedVersions)); return false; } else { From 3288f422b19d1eb65cbca8b36f8eb6aa4db8f582 Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 12 Jan 2024 15:39:53 +0100 Subject: [PATCH 67/86] Update ViaVersion api usage (#4386) - Switch to fluent accessor, since the getter was removed after being deprecated for 3 years --- .../geysermc/geyser/platform/spigot/GeyserSpigotInjector.java | 2 +- gradle/libs.versions.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java index 01bc0bea4..ad31131bd 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotInjector.java @@ -150,7 +150,7 @@ public class GeyserSpigotInjector extends GeyserInjector { childHandler = (ChannelInitializer) childHandlerField.get(handler); // ViaVersion non-Paper-injector workaround so we aren't double-injecting if (isViaVersion && childHandler instanceof BukkitChannelInitializer) { - childHandler = ((BukkitChannelInitializer) childHandler).getOriginal(); + childHandler = ((BukkitChannelInitializer) childHandler).original(); } break; } catch (Exception e) { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index c71aa715f..9e6eeca1d 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -23,7 +23,7 @@ log4j = "2.20.0" jline = "3.21.0" terminalconsoleappender = "1.2.0" folia = "1.19.4-R0.1-SNAPSHOT" -viaversion = "4.0.0" +viaversion = "4.9.2" adapters = "1.11-SNAPSHOT" commodore = "2.2" bungeecord = "a7c6ede" From 710dbfc1c87253779becc1551601be651612494e Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 17 Jan 2024 18:38:48 +0100 Subject: [PATCH 68/86] Bump mcpl to re-allow invalid block entity types (#4398) --- gradle/libs.versions.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 9e6eeca1d..72e34e2c8 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -14,7 +14,7 @@ protocol-connection = "3.0.0.Beta1-20231206.150507-113" raknet = "1.0.0.CR1-20231206.145325-12" blockstateupdater="1.20.50-20231106.161340-1" mcauthlib = "d9d773e" -mcprotocollib = "1.20.4-2-20231219.074138-2" +mcprotocollib = "1.20.4-2-20240116.220521-7" adventure = "4.14.0" adventure-platform = "4.3.0" junit = "5.9.2" From 509e00c138a52d616b8fe11917a2ff42cca2e08b Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 19 Jan 2024 00:19:07 +0100 Subject: [PATCH 69/86] Fix: Geyser on Velocity after they renamed packet class names :/ (#4399) --- .../velocity/GeyserVelocityCompressionDisabler.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityCompressionDisabler.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityCompressionDisabler.java index e787e7355..99c759767 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityCompressionDisabler.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityCompressionDisabler.java @@ -47,8 +47,14 @@ public class GeyserVelocityCompressionDisabler extends ChannelDuplexHandler { Method setCompressionMethod = null; try { - compressionPacketClass = Class.forName("com.velocitypowered.proxy.protocol.packet.SetCompression"); - loginSuccessPacketClass = Class.forName("com.velocitypowered.proxy.protocol.packet.ServerLoginSuccess"); + try { + compressionPacketClass = Class.forName("com.velocitypowered.proxy.protocol.packet.SetCompressionPacket"); + loginSuccessPacketClass = Class.forName("com.velocitypowered.proxy.protocol.packet.ServerLoginSuccessPacket"); + } catch (Exception ignored) { + // Velocity renamed packet classes in https://github.com/PaperMC/Velocity/commit/2ac8751337befd04f4663575f5d752c748384110 + compressionPacketClass = Class.forName("com.velocitypowered.proxy.protocol.packet.SetCompression"); + loginSuccessPacketClass = Class.forName("com.velocitypowered.proxy.protocol.packet.ServerLoginSuccess"); + } compressionEnabledEvent = Class.forName("com.velocitypowered.proxy.protocol.VelocityConnectionEvent") .getDeclaredField("COMPRESSION_ENABLED").get(null); setCompressionMethod = Class.forName("com.velocitypowered.proxy.connection.MinecraftConnection") From 16f9f0d94f98b52676f992cfbcb8db48a7808aa1 Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 20 Jan 2024 12:03:32 +0100 Subject: [PATCH 70/86] Don't try to show the server settings form to players who are not logged in (#4387) * Don't show the server settings form to players who are not yet logged in * Add brackets to if statement --- .../bedrock/BedrockServerSettingsRequestTranslator.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java index fb02d7e3e..aa7a2e40f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/bedrock/BedrockServerSettingsRequestTranslator.java @@ -42,6 +42,11 @@ public class BedrockServerSettingsRequestTranslator extends PacketTranslator Date: Mon, 22 Jan 2024 19:21:12 +0100 Subject: [PATCH 71/86] Gracefully handle invalid stone cutter recipes (#4406) * Gracefully handle invalid stone cutter recipes Further various little fixes: - bump source version in AP to 17 to silence build log spam - remove unneeded close() on auto-closable resource --- .../geysermc/geyser/processor/BlockEntityProcessor.java | 2 +- .../geyser/processor/CollisionRemapperProcessor.java | 2 +- .../geyser/processor/PacketTranslatorProcessor.java | 2 +- .../geysermc/geyser/processor/SoundHandlerProcessor.java | 2 +- .../java/org/geysermc/geyser/text/MinecraftLocale.java | 1 - .../protocol/java/JavaUpdateRecipesTranslator.java | 7 +++++++ 6 files changed, 11 insertions(+), 5 deletions(-) diff --git a/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java index f9ba68302..ccdaeda4e 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/BlockEntityProcessor.java @@ -30,7 +30,7 @@ import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; @SupportedAnnotationTypes("*") -@SupportedSourceVersion(SourceVersion.RELEASE_16) +@SupportedSourceVersion(SourceVersion.RELEASE_17) public class BlockEntityProcessor extends ClassProcessor { public BlockEntityProcessor() { super("org.geysermc.geyser.translator.level.block.entity.BlockEntity"); diff --git a/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java index 84e2e2ffd..30d94b7f5 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/CollisionRemapperProcessor.java @@ -30,7 +30,7 @@ import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; @SupportedAnnotationTypes("*") -@SupportedSourceVersion(SourceVersion.RELEASE_16) +@SupportedSourceVersion(SourceVersion.RELEASE_17) public class CollisionRemapperProcessor extends ClassProcessor { public CollisionRemapperProcessor() { super("org.geysermc.geyser.translator.collision.CollisionRemapper"); diff --git a/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java index 9b99d679b..d538a9ca1 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/PacketTranslatorProcessor.java @@ -30,7 +30,7 @@ import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; @SupportedAnnotationTypes("*") -@SupportedSourceVersion(SourceVersion.RELEASE_16) +@SupportedSourceVersion(SourceVersion.RELEASE_17) public class PacketTranslatorProcessor extends ClassProcessor { public PacketTranslatorProcessor() { super("org.geysermc.geyser.translator.protocol.Translator"); diff --git a/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java b/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java index c35c0ee4e..30ceef2c6 100644 --- a/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java +++ b/ap/src/main/java/org/geysermc/geyser/processor/SoundHandlerProcessor.java @@ -30,7 +30,7 @@ import javax.annotation.processing.SupportedSourceVersion; import javax.lang.model.SourceVersion; @SupportedAnnotationTypes("*") -@SupportedSourceVersion(SourceVersion.RELEASE_16) +@SupportedSourceVersion(SourceVersion.RELEASE_17) public class SoundHandlerProcessor extends ClassProcessor { public SoundHandlerProcessor() { super("org.geysermc.geyser.translator.sound.SoundTranslator"); diff --git a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java index f6e37787d..692a05110 100644 --- a/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java +++ b/core/src/main/java/org/geysermc/geyser/text/MinecraftLocale.java @@ -196,7 +196,6 @@ public class MinecraftLocale { Map.Entry entry = localeIterator.next(); langMap.put(entry.getKey(), entry.getValue().asText()); } - localeStream.close(); return langMap; } catch (FileNotFoundException e){ throw new AssertionError(GeyserLocale.getLocaleStringLog("geyser.locale.fail.file", locale, e.getMessage())); diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java index 344e06c96..7beb37af9 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaUpdateRecipesTranslator.java @@ -169,6 +169,13 @@ public class JavaUpdateRecipesTranslator extends PacketTranslator { StoneCuttingRecipeData stoneCuttingData = (StoneCuttingRecipeData) recipe.getData(); + if (stoneCuttingData.getIngredient().getOptions().length == 0) { + if (GeyserImpl.getInstance().getConfig().isDebugMode()) { + GeyserImpl.getInstance().getLogger().debug("Received broken stone cutter recipe: " + stoneCuttingData + " " + + recipe.getIdentifier() + " " + Registries.JAVA_ITEMS.get().get(stoneCuttingData.getResult().getId()).javaIdentifier()); + } + continue; + } ItemStack ingredient = stoneCuttingData.getIngredient().getOptions()[0]; List data = unsortedStonecutterData.get(ingredient.getId()); if (data == null) { From 7bcecdf40376044f2dc021683716e81d31e1217c Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 23 Jan 2024 00:34:53 +0100 Subject: [PATCH 72/86] Fix: Opening inventory menus in spectator mode (#4407) Revert to spectator_viewer instead of the native Bedrock spectator menu. While it looks uglier - e.g. it's showing health/hunger bars; it allows opening menus. It'll also be needed for entity spectating, since clicking on things isnt possible in bedrocks spectator mode --- core/src/main/java/org/geysermc/geyser/util/EntityUtils.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java index 68753c009..583e15c23 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -270,7 +270,7 @@ public final class EntityUtils { return switch (gamemode) { case CREATIVE -> GameType.CREATIVE; case ADVENTURE -> GameType.ADVENTURE; - case SPECTATOR -> GameType.SPECTATOR; + case SPECTATOR -> GameType.SURVIVAL_VIEWER; default -> GameType.SURVIVAL; }; } From 97ba6a25e6c34a4825e50bdd76636fbfad2a9c86 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 24 Jan 2024 21:18:09 +0100 Subject: [PATCH 73/86] Don't warn if clients send subchunkrequest packets (#4395) --- .../org/geysermc/geyser/network/LoggingPacketHandler.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index 5076dbeb2..cf794261b 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -285,6 +285,11 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } + @Override + public PacketSignal handle(SubChunkRequestPacket packet) { + return defaultHandler(packet); + } + @Override public PacketSignal handle(SubClientLoginPacket packet) { return defaultHandler(packet); From 3f577f41281618b23e022ba8ed727ce9d41c3d8e Mon Sep 17 00:00:00 2001 From: rtm516 Date: Wed, 24 Jan 2024 21:20:30 +0000 Subject: [PATCH 74/86] Add fetching MC versions and Console from the extensions API (#4168) * Add fetching MC versions and Console from the extensions API * Address reviews, expose custom MinecraftVersion interface * Rename of McVersion -> MinecraftVersionImpl; proper nonnull annotation * fluent consoleCommandSource(), change MinecraftVersion#name() to versionString() * Javadocs adjustments * Create impl package and move `MinecraftVersionImpl` there * api version bump --------- Co-authored-by: onebeastchris --- .../org/geysermc/geyser/api/GeyserApi.java | 26 ++++++++++ .../geyser/api/util/MinecraftVersion.java | 49 +++++++++++++++++++ .../java/org/geysermc/geyser/GeyserImpl.java | 30 ++++++++++-- .../geyser/impl/MinecraftVersionImpl.java | 31 ++++++++++++ gradle.properties | 2 +- 5 files changed, 134 insertions(+), 4 deletions(-) create mode 100644 api/src/main/java/org/geysermc/geyser/api/util/MinecraftVersion.java create mode 100644 core/src/main/java/org/geysermc/geyser/impl/MinecraftVersionImpl.java diff --git a/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java b/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java index 0d6007c1c..a9327d0db 100644 --- a/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java +++ b/api/src/main/java/org/geysermc/geyser/api/GeyserApi.java @@ -29,12 +29,14 @@ import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.api.Geyser; import org.geysermc.api.GeyserApiBase; +import org.geysermc.geyser.api.command.CommandSource; import org.geysermc.geyser.api.connection.GeyserConnection; import org.geysermc.geyser.api.event.EventBus; import org.geysermc.geyser.api.event.EventRegistrar; import org.geysermc.geyser.api.extension.ExtensionManager; import org.geysermc.geyser.api.network.BedrockListener; import org.geysermc.geyser.api.network.RemoteServer; +import org.geysermc.geyser.api.util.MinecraftVersion; import org.geysermc.geyser.api.util.PlatformType; import java.nio.file.Path; @@ -134,6 +136,30 @@ public interface GeyserApi extends GeyserApiBase { @NonNull PlatformType platformType(); + /** + * Gets the version of Java Minecraft that is supported. + * + * @return the supported version of Java Minecraft + */ + @NonNull + MinecraftVersion supportedJavaVersion(); + + /** + * Gets a list of Bedrock Minecraft versions that are supported. + * + * @return the list of supported Bedrock Minecraft versions + */ + @NonNull + List supportedBedrockVersions(); + + /** + * Gets the {@link CommandSource} for the console. + * + * @return the console command source + */ + @NonNull + CommandSource consoleCommandSource(); + /** * Gets the current {@link GeyserApiBase} instance. * diff --git a/api/src/main/java/org/geysermc/geyser/api/util/MinecraftVersion.java b/api/src/main/java/org/geysermc/geyser/api/util/MinecraftVersion.java new file mode 100644 index 000000000..34a4b59af --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/util/MinecraftVersion.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.util; + +import org.checkerframework.checker.nullness.qual.NonNull; + +/** + * Represents a Minecraft version. + */ +public interface MinecraftVersion { + + /** + * Gets the Minecraft version as a String. + * Example: "1.20.2", or "1.20.40/1.20.41" + * + * @return the version string + */ + @NonNull String versionString(); + + /** + * Gets the protocol version of this Minecraft version. + * + * @return the protocol version + */ + int protocolVersion(); +} diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index aef2288d6..13212b161 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -42,7 +42,11 @@ import net.kyori.adventure.text.format.NamedTextColor; import org.checkerframework.checker.nullness.qual.MonotonicNonNull; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.geysermc.api.Geyser; +import org.geysermc.geyser.api.command.CommandSource; +import org.geysermc.geyser.api.util.MinecraftVersion; +import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.cumulus.form.Form; import org.geysermc.cumulus.form.util.FormBuilder; import org.geysermc.erosion.packet.Packets; @@ -60,14 +64,15 @@ import org.geysermc.geyser.api.event.lifecycle.GeyserShutdownEvent; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.api.network.BedrockListener; import org.geysermc.geyser.api.network.RemoteServer; -import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommandManager; import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.erosion.UnixSocketClientListener; import org.geysermc.geyser.event.GeyserEventBus; import org.geysermc.geyser.extension.GeyserExtensionManager; +import org.geysermc.geyser.impl.MinecraftVersionImpl; import org.geysermc.geyser.level.WorldManager; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.network.netty.GeyserServer; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; @@ -111,8 +116,8 @@ public class GeyserImpl implements GeyserApi { .enable(JsonParser.Feature.ALLOW_SINGLE_QUOTES); public static final String NAME = "Geyser"; - public static final String GIT_VERSION = "${gitVersion}"; // A fallback for running in IDEs - public static final String VERSION = "${version}"; // A fallback for running in IDEs + public static final String GIT_VERSION = "${gitVersion}"; + public static final String VERSION = "${version}"; public static final String BUILD_NUMBER = "${buildNumber}"; public static final String BRANCH = "${branch}"; @@ -683,6 +688,25 @@ public class GeyserImpl implements GeyserApi { return platformType; } + @Override + public @NonNull MinecraftVersion supportedJavaVersion() { + return new MinecraftVersionImpl(GameProtocol.getJavaMinecraftVersion(), GameProtocol.getJavaProtocolVersion()); + } + + @Override + public @NonNull List supportedBedrockVersions() { + ArrayList versions = new ArrayList<>(); + for (BedrockCodec codec : GameProtocol.SUPPORTED_BEDROCK_CODECS) { + versions.add(new MinecraftVersionImpl(codec.getMinecraftVersion(), codec.getProtocolVersion())); + } + return Collections.unmodifiableList(versions); + } + + @Override + public @NonNull CommandSource consoleCommandSource() { + return getLogger(); + } + public int buildNumber() { if (!this.isProductionEnvironment()) { return 0; diff --git a/core/src/main/java/org/geysermc/geyser/impl/MinecraftVersionImpl.java b/core/src/main/java/org/geysermc/geyser/impl/MinecraftVersionImpl.java new file mode 100644 index 000000000..121d33c64 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/impl/MinecraftVersionImpl.java @@ -0,0 +1,31 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.impl; + +import org.geysermc.geyser.api.util.MinecraftVersion; + +public record MinecraftVersionImpl(String versionString, int protocolVersion) implements MinecraftVersion { +} diff --git a/gradle.properties b/gradle.properties index b6425f76d..93db310ff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -7,5 +7,5 @@ org.gradle.vfs.watch=false group=org.geysermc id=geyser -version=2.2.0-SNAPSHOT +version=2.2.1-SNAPSHOT description=Allows for players from Minecraft: Bedrock Edition to join Minecraft: Java Edition servers. \ No newline at end of file From 61b3ffd0deaa1d5183965aee774b8f14be1c6424 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 24 Jan 2024 22:28:03 +0100 Subject: [PATCH 75/86] Feature: Allow setting a different port in the motd (#4293) * Allow changing the broadcasted port using a system property. This may be needed if the port Geyser runs on & the port Bedrock players connect on do not match - e.g. due to port forwarding/different routing. * initial stab at making the broadcast port an (unsafe) config option * Automatically set broadcast port to be the bind port unless manually overridden * Warn about broadcast port mismatch * Use 0 instead of -1 as indicator to broadcast the port geyser is running on --- .../geyser/api/network/BedrockListener.java | 8 ++++ .../java/org/geysermc/geyser/GeyserImpl.java | 16 +++++++ .../defaults/ConnectionTestCommand.java | 46 ++++++++++++------- .../configuration/GeyserConfiguration.java | 2 + .../GeyserJacksonConfiguration.java | 9 ++++ .../geyser/network/netty/GeyserServer.java | 16 ++++++- core/src/main/resources/config.yml | 3 ++ 7 files changed, 81 insertions(+), 19 deletions(-) diff --git a/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java b/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java index 61fe286aa..af35d7ad1 100644 --- a/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java +++ b/api/src/main/java/org/geysermc/geyser/api/network/BedrockListener.java @@ -50,6 +50,14 @@ public interface BedrockListener { */ int port(); + /** + * Gets the broadcast port that's sent to Bedrock clients with the motd. + * This is the port that Bedrock clients will connect with. It usually does not differ from the listening port. + * + * @return the broadcast port + */ + int broadcastPort(); + /** * Gets the primary MOTD shown to Bedrock players if a ping passthrough setting is not enabled. *

diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index 13212b161..e9ea08260 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -314,6 +314,22 @@ public class GeyserImpl implements GeyserApi { } } + String broadcastPort = System.getProperty("geyserBroadcastPort", ""); + if (!broadcastPort.isEmpty()) { + int parsedPort; + try { + parsedPort = Integer.parseInt(broadcastPort); + if (parsedPort < 1 || parsedPort > 65535) { + throw new NumberFormatException("The broadcast port must be between 1 and 65535 inclusive!"); + } + } catch (NumberFormatException e) { + logger.error(String.format("Invalid broadcast port: %s! Defaulting to configured port.", broadcastPort + " (" + e.getMessage() + ")")); + parsedPort = config.getBedrock().port(); + } + config.getBedrock().setBroadcastPort(parsedPort); + logger.info("Broadcast port set from system property: " + parsedPort); + } + boolean floodgatePresent = bootstrap.testFloodgatePluginPresent(); if (config.getRemote().authType() == AuthType.FLOODGATE && !floodgatePresent) { logger.severe(GeyserLocale.getLocaleStringLog("geyser.bootstrap.floodgate.not_installed") + " " diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java index ad51826c3..981c97595 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ConnectionTestCommand.java @@ -31,6 +31,7 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommand; import org.geysermc.geyser.command.GeyserCommandSource; +import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.GeyserLocale; import org.geysermc.geyser.util.LoopbackUtil; @@ -84,7 +85,7 @@ public class ConnectionTestCommand extends GeyserCommand { return; } } else { - port = 19132; + port = geyser.getConfig().getBedrock().broadcastPort(); } String ip = fullAddress[0]; @@ -112,30 +113,41 @@ public class ConnectionTestCommand extends GeyserCommand { return; } - // Issue: do the ports not line up? - if (port != geyser.getConfig().getBedrock().port()) { - if (fullAddress.length == 2) { - sender.sendMessage("The port you are testing with (" + port + ") is not the same as you set in your Geyser configuration (" - + geyser.getConfig().getBedrock().port() + ")"); - sender.sendMessage("Re-run the command with the port in the config, or change the `bedrock` `port` in the config."); - if (geyser.getConfig().getBedrock().isCloneRemotePort()) { - sender.sendMessage("You have `clone-remote-port` enabled. This option ignores the `bedrock` `port` in the config, and uses the Java server port instead."); + GeyserConfiguration config = geyser.getConfig(); + + // Issue: do the ports not line up? We only check this if players don't override the broadcast port - if they do, they (hopefully) know what they're doing + if (config.getBedrock().broadcastPort() == config.getBedrock().port()) { + if (port != config.getBedrock().port()) { + if (fullAddress.length == 2) { + sender.sendMessage("The port you are testing with (" + port + ") is not the same as you set in your Geyser configuration (" + + config.getBedrock().port() + ")"); + sender.sendMessage("Re-run the command with the port in the config, or change the `bedrock` `port` in the config."); + if (config.getBedrock().isCloneRemotePort()) { + sender.sendMessage("You have `clone-remote-port` enabled. This option ignores the `bedrock` `port` in the config, and uses the Java server port instead."); + } + } else { + sender.sendMessage("You did not specify the port to check (add it with \":\"), " + + "and the default port 19132 does not match the port in your Geyser configuration (" + + config.getBedrock().port() + ")!"); + sender.sendMessage("Re-run the command with that port, or change the port in the config under `bedrock` `port`."); } - } else { - sender.sendMessage("You did not specify the port to check (add it with \":\"), " + - "and the default port 19132 does not match the port in your Geyser configuration (" - + geyser.getConfig().getBedrock().port() + ")!"); - sender.sendMessage("Re-run the command with that port, or change the port in the config under `bedrock` `port`."); + } + } else { + if (config.getBedrock().broadcastPort() != port) { + sender.sendMessage("The port you are testing with (" + port + ") is not the same as the broadcast port set in your Geyser configuration (" + + config.getBedrock().broadcastPort() + "). "); + sender.sendMessage("You ONLY need to change the broadcast port if clients connects with a port different from the port Geyser is running on."); + sender.sendMessage("Re-run the command with the port in the config, or change the `bedrock` `broadcast-port` in the config."); } } // Issue: is the `bedrock` `address` in the config different? - if (!geyser.getConfig().getBedrock().address().equals("0.0.0.0")) { + if (!config.getBedrock().address().equals("0.0.0.0")) { sender.sendMessage("The address specified in `bedrock` `address` is not \"0.0.0.0\" - this may cause issues unless this is deliberate and intentional."); } // Issue: did someone turn on enable-proxy-protocol, and they didn't mean it? - if (geyser.getConfig().getBedrock().isEnableProxyProtocol()) { + if (config.getBedrock().isEnableProxyProtocol()) { sender.sendMessage("You have the `enable-proxy-protocol` setting enabled. " + "Unless you're deliberately using additional software that REQUIRES this setting, you may not need it enabled."); } @@ -166,7 +178,7 @@ public class ConnectionTestCommand extends GeyserCommand { String connectionTestMotd = "Geyser Connection Test " + randomStr; CONNECTION_TEST_MOTD = connectionTestMotd; - sender.sendMessage("Testing server connection now. Please wait..."); + sender.sendMessage("Testing server connection to " + ip + " with port: " + port + " now. Please wait..."); JsonNode output; try { String hostname = URLEncoder.encode(ip, StandardCharsets.UTF_8); diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java index f9bb15b32..d12ab79e9 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserConfiguration.java @@ -122,6 +122,8 @@ public interface GeyserConfiguration { void setPort(int port); + void setBroadcastPort(int broadcastPort); + boolean isCloneRemotePort(); int getCompressionLevel(); diff --git a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java index 0874daa07..b3b7e8cd4 100644 --- a/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java +++ b/core/src/main/java/org/geysermc/geyser/configuration/GeyserJacksonConfiguration.java @@ -172,6 +172,15 @@ public abstract class GeyserJacksonConfiguration implements GeyserConfiguration return port; } + @Setter + @JsonProperty("broadcast-port") + private int broadcastPort = 0; + + @Override + public int broadcastPort() { + return broadcastPort; + } + @Getter @JsonProperty("clone-remote-port") private boolean cloneRemotePort = false; diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java index 20340826f..401a7f2cf 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java @@ -102,6 +102,11 @@ public final class GeyserServer { private ChannelFuture bootstrapFuture; + /** + * The port to broadcast in the pong. This can be different from the port the server is bound to, e.g. due to port forwarding. + */ + private final int broadcastPort; + public GeyserServer(GeyserImpl geyser, int threadCount) { this.geyser = geyser; this.group = TRANSPORT.eventLoopGroupFactory().apply(threadCount); @@ -115,6 +120,13 @@ public final class GeyserServer { } else { this.proxiedAddresses = null; } + + // It's set to 0 only if no system property or manual config value was set + if (geyser.getConfig().getBedrock().broadcastPort() == 0) { + geyser.getConfig().getBedrock().setBroadcastPort(geyser.getConfig().getBedrock().port()); + } + + this.broadcastPort = geyser.getConfig().getBedrock().broadcastPort(); } public CompletableFuture bind(InetSocketAddress address) { @@ -243,8 +255,8 @@ public final class GeyserServer { .nintendoLimited(false) .protocolVersion(GameProtocol.DEFAULT_BEDROCK_CODEC.getProtocolVersion()) .version(GameProtocol.DEFAULT_BEDROCK_CODEC.getMinecraftVersion()) // Required to not be empty as of 1.16.210.59. Can only contain . and numbers. - .ipv4Port(this.geyser.getConfig().getBedrock().port()) - .ipv6Port(this.geyser.getConfig().getBedrock().port()) + .ipv4Port(this.broadcastPort) + .ipv6Port(this.broadcastPort) .serverId(bootstrapFuture.channel().config().getOption(RakChannelOption.RAK_GUID)); if (config.isPassthroughMotd() && pingInfo != null && pingInfo.getDescription() != null) { diff --git a/core/src/main/resources/config.yml b/core/src/main/resources/config.yml index b10c2788e..0617b316c 100644 --- a/core/src/main/resources/config.yml +++ b/core/src/main/resources/config.yml @@ -30,6 +30,9 @@ bedrock: # How much to compress network traffic to the Bedrock client. The higher the number, the more CPU usage used, but # the smaller the bandwidth used. Does not have any effect below -1 or above 9. Set to -1 to disable. compression-level: 6 + # The port to broadcast to Bedrock clients with the MOTD that they should use to connect to the server. + # DO NOT uncomment and change this unless Geyser runs on a different internal port than the one that is used to connect. + # broadcast-port: 19132 # Whether to enable PROXY protocol or not for clients. You DO NOT WANT this feature unless you run UDP reverse proxy # in front of your Geyser instance. enable-proxy-protocol: false From 07150db59234078879d0fae85c29d5c8d23ccb7e Mon Sep 17 00:00:00 2001 From: rtm516 Date: Sun, 28 Jan 2024 22:49:47 +0000 Subject: [PATCH 76/86] Fix language key typo when floodgate encryption fails (#4412) --- .../main/java/org/geysermc/geyser/session/GeyserSession.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 26e206458..5501e990e 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -935,7 +935,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { ).toString()); } catch (Exception e) { geyser.getLogger().error(GeyserLocale.getLocaleStringLog("geyser.auth.floodgate.encrypt_fail"), e); - disconnect(GeyserLocale.getPlayerLocaleString("geyser.auth.floodgate.encryption_fail", getClientData().getLanguageCode())); + disconnect(GeyserLocale.getPlayerLocaleString("geyser.auth.floodgate.encrypt_fail", getClientData().getLanguageCode())); return; } From f555dc0a928bf5d2e46859b726d688542158408f Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 31 Jan 2024 11:21:06 +0100 Subject: [PATCH 77/86] Feature: Camera/Input locking API (#4332) Adds API methods to control player cameras - including fancy transitions, color fades, or simple input locks. --- api/build.gradle.kts | 1 + .../geyser/api/bedrock/camera/CameraData.java | 148 +++++++++++ .../api/bedrock/camera/CameraEaseType.java | 77 ++++++ .../geyser/api/bedrock/camera/CameraFade.java | 94 +++++++ .../api/bedrock/camera/CameraPerspective.java | 48 ++++ .../api/bedrock/camera/CameraPosition.java | 150 +++++++++++ .../api/bedrock/camera/CameraShake.java | 3 + .../api/connection/GeyserConnection.java | 39 ++- .../geyser/api/entity/EntityData.java | 84 +++++++ .../type/player/GeyserPlayerEntity.java | 8 + .../geyser/entity/GeyserEntityData.java | 99 ++++++++ .../entity/type/player/PlayerEntity.java | 17 +- .../geyser/impl/camera/CameraDefinitions.java | 96 +++++++ .../geyser/impl/camera/GeyserCameraData.java | 235 ++++++++++++++++++ .../geyser/impl/camera/GeyserCameraFade.java | 104 ++++++++ .../impl/camera/GeyserCameraPosition.java | 131 ++++++++++ .../geyser/item/GeyserCustomItemData.java | 2 +- .../geyser/item/GeyserCustomItemOptions.java | 2 +- .../item/GeyserNonVanillaCustomItemData.java | 38 +-- .../block/GeyserCustomBlockComponents.java | 4 +- .../level/block/GeyserCustomBlockData.java | 6 +- .../level/block/GeyserCustomBlockState.java | 2 +- .../level/block/GeyserGeometryComponent.java | 8 +- .../level/block/GeyserJavaBlockState.java | 4 +- .../level/block/GeyserMaterialInstance.java | 4 +- .../GeyserNonVanillaCustomBlockData.java | 42 ++-- .../geyser/network/LoggingPacketHandler.java | 10 + .../loader/ProviderRegistryLoader.java | 26 +- .../mappings/versions/MappingsReader_v1.java | 34 ++- .../CustomBlockRegistryPopulator.java | 16 +- .../geyser/registry/type/CustomSkull.java | 22 +- .../geyser/session/GeyserSession.java | 108 ++++---- .../protocol/java/JavaLoginTranslator.java | 2 +- .../geysermc/geyser/util/DimensionUtils.java | 4 +- gradle.properties | 2 +- gradle/libs.versions.toml | 2 + 36 files changed, 1523 insertions(+), 149 deletions(-) create mode 100644 api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraData.java create mode 100644 api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraEaseType.java create mode 100644 api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraFade.java create mode 100644 api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraPerspective.java create mode 100644 api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraPosition.java create mode 100644 api/src/main/java/org/geysermc/geyser/api/entity/EntityData.java create mode 100644 core/src/main/java/org/geysermc/geyser/entity/GeyserEntityData.java create mode 100644 core/src/main/java/org/geysermc/geyser/impl/camera/CameraDefinitions.java create mode 100644 core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraData.java create mode 100644 core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraFade.java create mode 100644 core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraPosition.java diff --git a/api/build.gradle.kts b/api/build.gradle.kts index c0ed242b6..bd54a9ce4 100644 --- a/api/build.gradle.kts +++ b/api/build.gradle.kts @@ -4,4 +4,5 @@ plugins { dependencies { api(libs.base.api) + api(libs.math) } \ No newline at end of file diff --git a/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraData.java b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraData.java new file mode 100644 index 000000000..2f715fa1e --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraData.java @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.bedrock.camera; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.connection.GeyserConnection; + +import java.util.Set; +import java.util.UUID; + +/** + * This interface holds all the methods that relate to a client's camera. + * Can be accessed through {@link GeyserConnection#camera()}. + */ +public interface CameraData { + + /** + * Sends a camera fade instruction to the client. + * If an existing camera fade is already in progress, the current fade will be prolonged. + * Can be built using {@link CameraFade.Builder}. + * To stop a fade early, use {@link #clearCameraInstructions()}. + * + * @param fade the camera fade instruction to send + */ + void sendCameraFade(@NonNull CameraFade fade); + + /** + * Sends a camera position instruction to the client. + * If an existing camera movement is already in progress, + * the final camera position will be the one of the latest instruction, and + * the (optional) camera fade will be added on top of the existing fade. + * Can be built using {@link CameraPosition.Builder}. + * To stop reset the camera position/stop ongoing instructions, use {@link #clearCameraInstructions()}. + * + * @param position the camera position instruction to send + */ + void sendCameraPosition(@NonNull CameraPosition position); + + /** + * Stops all sent camera instructions (fades, movements, and perspective locks). + * This will not stop any camera shakes/input locks/fog effects, use the respective methods for those. + */ + void clearCameraInstructions(); + + /** + * Forces a {@link CameraPerspective} on the client. This will prevent the client + * from changing their camera perspective until it is unlocked via {@link #clearCameraInstructions()}. + *

+ * Note: You cannot force a client into a free camera perspective with this method. + * To do that, send a {@link CameraPosition} via {@link #sendCameraPosition(CameraPosition)} - it requires a set position + * instead of being relative to the player. + * + * @param perspective the {@link CameraPerspective} to force + */ + void forceCameraPerspective(@NonNull CameraPerspective perspective); + + /** + * Gets the client's current {@link CameraPerspective}, if one is currently forced. + * This will return {@code null} if the client is not currently forced into a perspective. + * If a perspective is forced, the client will not be able to change their camera perspective until it is unlocked. + * + * @return the forced perspective, or {@code null} if none is forced + */ + @Nullable CameraPerspective forcedCameraPerspective(); + + /** + * Shakes the client's camera. + *

+ * If the camera is already shaking with the same {@link CameraShake} type, then the additional intensity + * will be layered on top of the existing intensity, with their own distinct durations.
+ * If the existing shake type is different and the new intensity/duration are not positive, the existing shake only + * switches to the new type. Otherwise, the existing shake is completely overridden. + * + * @param intensity the intensity of the shake. The client has a maximum total intensity of 4. + * @param duration the time in seconds that the shake will occur for + * @param type the type of shake + */ + void shakeCamera(float intensity, float duration, @NonNull CameraShake type); + + /** + * Stops all camera shakes of any type. + */ + void stopCameraShake(); + + /** + * Adds the given fog IDs to the fog cache, then sends all fog IDs in the cache to the client. + *

+ * Fog IDs can be found here + * + * @param fogNameSpaces the fog IDs to add. If empty, the existing cached IDs will still be sent. + */ + void sendFog(String... fogNameSpaces); + + /** + * Removes the given fog IDs from the fog cache, then sends all fog IDs in the cache to the client. + * + * @param fogNameSpaces the fog IDs to remove. If empty, all fog IDs will be removed. + */ + void removeFog(String... fogNameSpaces); + + /** + * Returns an immutable copy of all fog affects currently applied to this client. + */ + @NonNull + Set fogEffects(); + + /** + * (Un)locks the client's camera, so that they cannot look around. + * To ensure the camera is only unlocked when all locks are released, you must supply + * a UUID when using method, and use the same UUID to unlock the camera. + * + * @param lock whether to lock the camera + * @param owner the owner of the lock, represented with a UUID + * @return if the camera is locked after this method call + */ + boolean lockCamera(boolean lock, @NonNull UUID owner); + + /** + * Returns whether the client's camera is locked. + * + * @return whether the camera is currently locked + */ + boolean isCameraLocked(); +} \ No newline at end of file diff --git a/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraEaseType.java b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraEaseType.java new file mode 100644 index 000000000..64c313ec1 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraEaseType.java @@ -0,0 +1,77 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.bedrock.camera; + +/** + * These are all the easing types that can be used when sending a {@link CameraPosition} instruction. + * When using these, the client won't teleport to the new camera position, but instead transition to it. + *

+ * See https://easings.net/ for more information. + */ +public enum CameraEaseType { + LINEAR("linear"), + SPRING("spring"), + EASE_IN_SINE("in_sine"), + EASE_OUT_SINE("out_sine"), + EASE_IN_OUT_SINE("in_out_sine"), + EASE_IN_QUAD("in_quad"), + EASE_OUT_QUAD("out_quad"), + EASE_IN_OUT_QUAD("in_out_quad"), + EASE_IN_CUBIC("in_cubic"), + EASE_OUT_CUBIC("out_cubic"), + EASE_IN_OUT_CUBIC("in_out_cubic"), + EASE_IN_QUART("in_quart"), + EASE_OUT_QUART("out_quart"), + EASE_IN_OUT_QUART("in_out_quart"), + EASE_IN_QUINT("in_quint"), + EASE_OUT_QUINT("out_quint"), + EASE_IN_OUT_QUINT("in_out_quint"), + EASE_IN_EXPO("in_expo"), + EASE_OUT_EXPO("out_expo"), + EASE_IN_OUT_EXPO("in_out_expo"), + EASE_IN_CIRC("in_circ"), + EASE_OUT_CIRC("out_circ"), + EASE_IN_OUT_CIRC("in_out_circ"), + EASE_IN_BACK("in_back"), + EASE_OUT_BACK("out_back"), + EASE_IN_OUT_BACK("in_out_back"), + EASE_IN_ELASTIC("in_elastic"), + EASE_OUT_ELASTIC("out_elastic"), + EASE_IN_OUT_ELASTIC("in_out_elastic"), + EASE_IN_BOUNCE("in_bounce"), + EASE_OUT_BOUNCE("out_bounce"), + EASE_IN_OUT_BOUNCE("in_out_bounce"); + + private final String id; + + CameraEaseType(String id) { + this.id = id; + } + + public String id() { + return this.id; + } +} diff --git a/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraFade.java b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraFade.java new file mode 100644 index 000000000..38baa73bb --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraFade.java @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.bedrock.camera; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.common.value.qual.IntRange; +import org.geysermc.geyser.api.GeyserApi; + +import java.awt.Color; + +/** + * Represents a coloured fade overlay on the camera. + *

+ * Can be sent with {@link CameraData#sendCameraFade(CameraFade)}, or with a {@link CameraPosition} instruction. + */ +public interface CameraFade { + + /** + * Gets the color overlay of the camera. + * Bedrock uses an RGB color system. + * + * @return the color of the fade + */ + @NonNull Color color(); + + /** + * Gets the seconds it takes to fade in. + * All fade times combined must take at least 0.5 seconds, and at most 30 seconds. + * + * @return the seconds it takes to fade in + */ + float fadeInSeconds(); + + /** + * Gets the seconds the overlay is held. + * All fade times combined must take at least 0.5 seconds, and at most 30 seconds. + * + * @return the seconds the overlay is held + */ + float fadeHoldSeconds(); + + /** + * Gets the seconds it takes to fade out. + * All fade times combined must take at least 0.5 seconds, and at most 30 seconds. + * + * @return the seconds it takes to fade out + */ + float fadeOutSeconds(); + + /** + * Creates a Builder for CameraFade + * + * @return a CameraFade Builder + */ + static CameraFade.Builder builder() { + return GeyserApi.api().provider(CameraFade.Builder.class); + } + + interface Builder { + + Builder color(@NonNull Color color); + + Builder fadeInSeconds(@IntRange(from = 0, to = 10) float fadeInSeconds); + + Builder fadeHoldSeconds(@IntRange(from = 0, to = 10) float fadeHoldSeconds); + + Builder fadeOutSeconds(@IntRange(from = 0, to = 10) float fadeOutSeconds); + + CameraFade build(); + } +} diff --git a/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraPerspective.java b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraPerspective.java new file mode 100644 index 000000000..4167f2a34 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraPerspective.java @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.bedrock.camera; + +/** + * Represents a camera perspective that a player's camera can take. + * All perspectives except for {@link #FREE} are locked to the player's head, + * and are therefore relative to the player's position and rotation. + */ +public enum CameraPerspective { + FIRST_PERSON("minecraft:first_person"), + FREE("minecraft:free"), + THIRD_PERSON("minecraft:third_person"), + THIRD_PERSON_FRONT("minecraft:third_person_front"); + + private final String id; + + CameraPerspective(String id) { + this.id = id; + } + + public String id() { + return this.id; + } +} diff --git a/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraPosition.java b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraPosition.java new file mode 100644 index 000000000..6d42d499e --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraPosition.java @@ -0,0 +1,150 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.bedrock.camera; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.checkerframework.common.value.qual.IntRange; +import org.cloudburstmc.math.vector.Vector3f; +import org.geysermc.geyser.api.GeyserApi; + +/** + * This interface represents a camera position instruction. Can be built with the {@link #builder()}. + *

+ * Any camera position instruction pins the client camera to a specific position and rotation. + * You can set {@link CameraEaseType} to ensure a smooth transition that will last {@link #easeSeconds()} seconds. + * A {@link CameraFade} can also be sent, which will transition the player to a coloured transition during the transition. + *

+ * Use {@link CameraData#sendCameraPosition(CameraPosition)} to send such an instruction to any connection. + */ +public interface CameraPosition { + + /** + * Gets the camera's position. + * + * @return camera position vector + */ + @NonNull Vector3f position(); + + /** + * Gets the {@link CameraEaseType} of the camera. + * If not set, there is no easing. + * + * @return camera ease type + */ + @Nullable CameraEaseType easeType(); + + /** + * Gets the {@link CameraFade} to be sent along the camera position instruction. + * If set, they will run at once. + * + * @return camera fade, or null if not present + */ + @Nullable CameraFade cameraFade(); + + /** + * Gets the easing duration of the camera, in seconds. + * Is only used if a {@link CameraEaseType} is set. + * + * @return camera easing duration in seconds + */ + float easeSeconds(); + + /** + * Gets the x-axis rotation of the camera. + * To prevent the camera from being upside down, Bedrock limits the range to -90 to 90. + * Will be overridden if {@link #facingPosition()} is set. + * + * @return camera x-axis rotation + */ + @IntRange(from = -90, to = 90) int rotationX(); + + /** + * Gets the y-axis rotation of the camera. + * Will be overridden if {@link #facingPosition()} is set. + * + * @return camera y-axis rotation + */ + int rotationY(); + + /** + * Gets the position that the camera is facing. + * Can be used instead of manually setting rotation values. + *

+ * If set, the rotation values set via {@link #rotationX()} and {@link #rotationY()} will be ignored. + * + * @return Camera's facing position + */ + @Nullable Vector3f facingPosition(); + + /** + * Controls whether player effects, such as night vision or blindness, should be rendered on the camera. + * Defaults to false. + * + * @return whether player effects should be rendered + */ + boolean renderPlayerEffects(); + + /** + * Controls whether the player position should be used for directional audio. + * If false, the camera position will be used instead. + * + * @return whether the players position should be used for directional audio + */ + boolean playerPositionForAudio(); + + /** + * Creates a Builder for CameraPosition + * + * @return a CameraPosition Builder + */ + static CameraPosition.Builder builder() { + return GeyserApi.api().provider(CameraPosition.Builder.class); + } + + interface Builder { + + Builder cameraFade(@Nullable CameraFade cameraFade); + + Builder renderPlayerEffects(boolean renderPlayerEffects); + + Builder playerPositionForAudio(boolean playerPositionForAudio); + + Builder easeType(@Nullable CameraEaseType easeType); + + Builder easeSeconds(float easeSeconds); + + Builder position(@NonNull Vector3f position); + + Builder rotationX(@IntRange(from = -90, to = 90) int rotationX); + + Builder rotationY(int rotationY); + + Builder facingPosition(@Nullable Vector3f facingPosition); + + CameraPosition build(); + } +} diff --git a/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraShake.java b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraShake.java index 67b56b1f5..304969edb 100644 --- a/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraShake.java +++ b/api/src/main/java/org/geysermc/geyser/api/bedrock/camera/CameraShake.java @@ -25,6 +25,9 @@ package org.geysermc.geyser.api.bedrock.camera; +/** + * Represents a camera shake instruction. Can be sent in {@link CameraData#shakeCamera(float, float, CameraShake)} + */ public enum CameraShake { POSITIONAL, ROTATIONAL diff --git a/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java b/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java index 7094812a0..9bda4f903 100644 --- a/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java +++ b/api/src/main/java/org/geysermc/geyser/api/connection/GeyserConnection.java @@ -29,8 +29,10 @@ import org.checkerframework.checker.index.qual.NonNegative; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.api.connection.Connection; +import org.geysermc.geyser.api.bedrock.camera.CameraData; import org.geysermc.geyser.api.bedrock.camera.CameraShake; import org.geysermc.geyser.api.command.CommandSource; +import org.geysermc.geyser.api.entity.EntityData; import org.geysermc.geyser.api.entity.type.GeyserEntity; import org.geysermc.geyser.api.entity.type.player.GeyserPlayerEntity; @@ -41,10 +43,29 @@ import java.util.concurrent.CompletableFuture; * Represents a player connection used in Geyser. */ public interface GeyserConnection extends Connection, CommandSource { + + /** + * Exposes the {@link CameraData} for this connection. + * It allows you to send fogs, camera shakes, force camera perspectives, and more. + * + * @return the CameraData for this connection. + */ + @NonNull CameraData camera(); + + /** + * Exposes the {@link EntityData} for this connection. + * It allows you to get entities by their Java entity ID, show emotes, and get the player entity. + * + * @return the EntityData for this connection. + */ + @NonNull EntityData entities(); + /** * @param javaId the Java entity ID to look up. * @return a {@link GeyserEntity} if present in this connection's entity tracker. + * @deprecated Use {@link EntityData#entityByJavaId(int)} instead */ + @Deprecated @NonNull CompletableFuture<@Nullable GeyserEntity> entityByJavaId(@NonNegative int javaId); @@ -53,11 +74,14 @@ public interface GeyserConnection extends Connection, CommandSource { * * @param emoter the player entity emoting. * @param emoteId the emote ID to send to this client. + * @deprecated use {@link EntityData#showEmote(GeyserPlayerEntity, String)} instead */ + @Deprecated void showEmote(@NonNull GeyserPlayerEntity emoter, @NonNull String emoteId); /** - * Shakes the client's camera.

+ * Shakes the client's camera. + *

* If the camera is already shaking with the same {@link CameraShake} type, then the additional intensity * will be layered on top of the existing intensity, with their own distinct durations.
* If the existing shake type is different and the new intensity/duration are not positive, the existing shake only @@ -66,12 +90,18 @@ public interface GeyserConnection extends Connection, CommandSource { * @param intensity the intensity of the shake. The client has a maximum total intensity of 4. * @param duration the time in seconds that the shake will occur for * @param type the type of shake + * + * @deprecated Use {@link CameraData#shakeCamera(float, float, CameraShake)} instead. */ + @Deprecated void shakeCamera(float intensity, float duration, @NonNull CameraShake type); /** * Stops all camera shake of any type. + * + * @deprecated Use {@link CameraData#stopCameraShake()} instead. */ + @Deprecated void stopCameraShake(); /** @@ -80,19 +110,26 @@ public interface GeyserConnection extends Connection, CommandSource { * Fog IDs can be found here * * @param fogNameSpaces the fog IDs to add. If empty, the existing cached IDs will still be sent. + * @deprecated Use {@link CameraData#sendFog(String...)} instead. */ + @Deprecated void sendFog(String... fogNameSpaces); /** * Removes the given fog IDs from the fog cache, then sends all fog IDs in the cache to the client. * * @param fogNameSpaces the fog IDs to remove. If empty, all fog IDs will be removed. + * @deprecated Use {@link CameraData#removeFog(String...)} instead. */ + @Deprecated void removeFog(String... fogNameSpaces); /** * Returns an immutable copy of all fog affects currently applied to this client. + * + * @deprecated Use {@link CameraData#fogEffects()} instead. */ + @Deprecated @NonNull Set fogEffects(); } diff --git a/api/src/main/java/org/geysermc/geyser/api/entity/EntityData.java b/api/src/main/java/org/geysermc/geyser/api/entity/EntityData.java new file mode 100644 index 000000000..90b3fc821 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/entity/EntityData.java @@ -0,0 +1,84 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.entity; + +import org.checkerframework.checker.index.qual.NonNegative; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.geysermc.geyser.api.connection.GeyserConnection; +import org.geysermc.geyser.api.entity.type.GeyserEntity; +import org.geysermc.geyser.api.entity.type.player.GeyserPlayerEntity; + +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +/** + * This class holds all the methods that relate to entities. + * Can be accessed through {@link GeyserConnection#entities()}. + */ +public interface EntityData { + + /** + * Returns a {@link GeyserEntity} to e.g. make them play an emote. + * + * @param javaId the Java entity ID to look up + * @return a {@link GeyserEntity} if present in this connection's entity tracker + */ + @NonNull CompletableFuture<@Nullable GeyserEntity> entityByJavaId(@NonNegative int javaId); + + /** + * Displays a player entity as emoting to this client. + * + * @param emoter the player entity emoting + * @param emoteId the emote ID to send to this client + */ + void showEmote(@NonNull GeyserPlayerEntity emoter, @NonNull String emoteId); + + /** + * Gets the {@link GeyserPlayerEntity} of this connection. + * + * @return the {@link GeyserPlayerEntity} of this connection + */ + @NonNull GeyserPlayerEntity playerEntity(); + + /** + * (Un)locks the client's movement inputs, so that they cannot move. + * To ensure that movement is only unlocked when all locks are released, you must supply + * a UUID with this method, and use the same UUID to unlock the camera. + * + * @param lock whether to lock the movement + * @param owner the owner of the lock + * @return if the movement is locked after this method call + */ + boolean lockMovement(boolean lock, @NonNull UUID owner); + + /** + * Returns whether the client's movement is currently locked. + * + * @return whether the movement is locked + */ + boolean isMovementLocked(); +} diff --git a/api/src/main/java/org/geysermc/geyser/api/entity/type/player/GeyserPlayerEntity.java b/api/src/main/java/org/geysermc/geyser/api/entity/type/player/GeyserPlayerEntity.java index da2e28609..bba4dbf3e 100644 --- a/api/src/main/java/org/geysermc/geyser/api/entity/type/player/GeyserPlayerEntity.java +++ b/api/src/main/java/org/geysermc/geyser/api/entity/type/player/GeyserPlayerEntity.java @@ -25,7 +25,15 @@ package org.geysermc.geyser.api.entity.type.player; +import org.cloudburstmc.math.vector.Vector3f; import org.geysermc.geyser.api.entity.type.GeyserEntity; public interface GeyserPlayerEntity extends GeyserEntity { + + /** + * Gets the position of the player. + * + * @return the position of the player. + */ + Vector3f position(); } diff --git a/core/src/main/java/org/geysermc/geyser/entity/GeyserEntityData.java b/core/src/main/java/org/geysermc/geyser/entity/GeyserEntityData.java new file mode 100644 index 000000000..c9ef7a2dd --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/entity/GeyserEntityData.java @@ -0,0 +1,99 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.entity; + +import org.checkerframework.checker.index.qual.NonNegative; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.protocol.bedrock.packet.EmotePacket; +import org.geysermc.geyser.api.entity.EntityData; +import org.geysermc.geyser.api.entity.type.GeyserEntity; +import org.geysermc.geyser.api.entity.type.player.GeyserPlayerEntity; +import org.geysermc.geyser.entity.type.Entity; +import org.geysermc.geyser.session.GeyserSession; + +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; +import java.util.concurrent.CompletableFuture; + +public class GeyserEntityData implements EntityData { + + private final GeyserSession session; + + private final Set movementLockOwners = new HashSet<>(); + + public GeyserEntityData(GeyserSession session) { + this.session = session; + } + + @Override + public @NonNull CompletableFuture<@Nullable GeyserEntity> entityByJavaId(@NonNegative int javaId) { + CompletableFuture future = new CompletableFuture<>(); + session.ensureInEventLoop(() -> future.complete(session.getEntityCache().getEntityByJavaId(javaId))); + return future; + } + + @Override + public void showEmote(@NonNull GeyserPlayerEntity emoter, @NonNull String emoteId) { + Objects.requireNonNull(emoter, "emoter must not be null!"); + Entity entity = (Entity) emoter; + if (entity.getSession() != session) { + throw new IllegalStateException("Given entity must be from this session!"); + } + + EmotePacket packet = new EmotePacket(); + packet.setRuntimeEntityId(entity.getGeyserId()); + packet.setXuid(""); + packet.setPlatformId(""); // BDS sends empty + packet.setEmoteId(emoteId); + session.sendUpstreamPacket(packet); + } + + @Override + public @NonNull GeyserPlayerEntity playerEntity() { + return session.getPlayerEntity(); + } + + @Override + public boolean lockMovement(boolean lock, @NonNull UUID owner) { + Objects.requireNonNull(owner, "owner must not be null!"); + if (lock) { + movementLockOwners.add(owner); + } else { + movementLockOwners.remove(owner); + } + + session.lockInputs(session.camera().isCameraLocked(), isMovementLocked()); + return isMovementLocked(); + } + + @Override + public boolean isMovementLocked() { + return !movementLockOwners.isEmpty(); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java index 7504db1b1..37e408502 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java @@ -39,12 +39,20 @@ import net.kyori.adventure.text.Component; import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.math.vector.Vector3f; import org.cloudburstmc.math.vector.Vector3i; -import org.cloudburstmc.protocol.bedrock.data.*; +import org.cloudburstmc.protocol.bedrock.data.Ability; +import org.cloudburstmc.protocol.bedrock.data.AbilityLayer; +import org.cloudburstmc.protocol.bedrock.data.AttributeData; +import org.cloudburstmc.protocol.bedrock.data.GameType; +import org.cloudburstmc.protocol.bedrock.data.PlayerPermission; import org.cloudburstmc.protocol.bedrock.data.command.CommandPermission; import org.cloudburstmc.protocol.bedrock.data.entity.EntityDataTypes; import org.cloudburstmc.protocol.bedrock.data.entity.EntityFlag; import org.cloudburstmc.protocol.bedrock.data.entity.EntityLinkData; -import org.cloudburstmc.protocol.bedrock.packet.*; +import org.cloudburstmc.protocol.bedrock.packet.AddPlayerPacket; +import org.cloudburstmc.protocol.bedrock.packet.MovePlayerPacket; +import org.cloudburstmc.protocol.bedrock.packet.SetEntityDataPacket; +import org.cloudburstmc.protocol.bedrock.packet.SetEntityLinkPacket; +import org.cloudburstmc.protocol.bedrock.packet.UpdateAttributesPacket; import org.geysermc.geyser.api.entity.type.player.GeyserPlayerEntity; import org.geysermc.geyser.entity.EntityDefinitions; import org.geysermc.geyser.entity.type.Entity; @@ -433,4 +441,9 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { public UUID getTabListUuid() { return getUuid(); } + + @Override + public Vector3f position() { + return this.position.clone(); + } } diff --git a/core/src/main/java/org/geysermc/geyser/impl/camera/CameraDefinitions.java b/core/src/main/java/org/geysermc/geyser/impl/camera/CameraDefinitions.java new file mode 100644 index 000000000..80564bdf3 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/impl/camera/CameraDefinitions.java @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.impl.camera; + +import org.cloudburstmc.protocol.bedrock.data.camera.CameraAudioListener; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraPreset; +import org.cloudburstmc.protocol.common.DefinitionRegistry; +import org.cloudburstmc.protocol.common.NamedDefinition; +import org.cloudburstmc.protocol.common.SimpleDefinitionRegistry; +import org.cloudburstmc.protocol.common.util.OptionalBoolean; +import org.geysermc.geyser.api.bedrock.camera.CameraPerspective; + +import java.util.List; + +public class CameraDefinitions { + + public static final DefinitionRegistry CAMERA_DEFINITIONS; + + public static final List CAMERA_PRESETS; + + static { + CAMERA_PRESETS = List.of( + new CameraPreset(CameraPerspective.FIRST_PERSON.id(), "", null, null, null, null, OptionalBoolean.empty()), + new CameraPreset(CameraPerspective.FREE.id(), "", null, null, null, null, OptionalBoolean.empty()), + new CameraPreset(CameraPerspective.THIRD_PERSON.id(), "", null, null, null, null, OptionalBoolean.empty()), + new CameraPreset(CameraPerspective.THIRD_PERSON_FRONT.id(), "", null, null, null, null, OptionalBoolean.empty()), + new CameraPreset("geyser:free_audio", "minecraft:free", null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.of(false)), + new CameraPreset("geyser:free_effects", "minecraft:free", null, null, null, CameraAudioListener.CAMERA, OptionalBoolean.of(true)), + new CameraPreset("geyser:free_audio_effects", "minecraft:free", null, null, null, CameraAudioListener.PLAYER, OptionalBoolean.of(true))); + + SimpleDefinitionRegistry.Builder builder = SimpleDefinitionRegistry.builder(); + for (int i = 0; i < CAMERA_PRESETS.size(); i++) { + builder.add(CameraDefinition.of(CAMERA_PRESETS.get(i).getIdentifier(), i)); + } + CAMERA_DEFINITIONS = builder.build(); + } + + public static NamedDefinition getById(int id) { + return CAMERA_DEFINITIONS.getDefinition(id); + } + + public static NamedDefinition getByFunctionality(boolean audio, boolean effects) { + if (!audio && !effects) { + return getById(1); // FREE + } + if (audio) { + if (effects) { + return getById(6); // FREE_AUDIO_EFFECTS + } else { + return getById(4); // FREE_AUDIO + } + } else { + return getById(5); // FREE_EFFECTS + } + } + + public record CameraDefinition(String identifier, int runtimeId) implements NamedDefinition { + + @Override + public String getIdentifier() { + return identifier; + } + + @Override + public int getRuntimeId() { + return runtimeId; + } + + public static CameraDefinition of(String identifier, int runtimeId) { + return new CameraDefinition(identifier, runtimeId); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraData.java b/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraData.java new file mode 100644 index 000000000..28c881eba --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraData.java @@ -0,0 +1,235 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.impl.camera; + +import lombok.Getter; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.cloudburstmc.math.vector.Vector2f; +import org.cloudburstmc.math.vector.Vector3f; +import org.cloudburstmc.protocol.bedrock.data.CameraShakeAction; +import org.cloudburstmc.protocol.bedrock.data.CameraShakeType; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraEase; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraFadeInstruction; +import org.cloudburstmc.protocol.bedrock.data.camera.CameraSetInstruction; +import org.cloudburstmc.protocol.bedrock.packet.CameraInstructionPacket; +import org.cloudburstmc.protocol.bedrock.packet.CameraShakePacket; +import org.cloudburstmc.protocol.bedrock.packet.PlayerFogPacket; +import org.geysermc.geyser.api.bedrock.camera.CameraEaseType; +import org.geysermc.geyser.api.bedrock.camera.CameraData; +import org.geysermc.geyser.api.bedrock.camera.CameraFade; +import org.geysermc.geyser.api.bedrock.camera.CameraPerspective; +import org.geysermc.geyser.api.bedrock.camera.CameraPosition; +import org.geysermc.geyser.api.bedrock.camera.CameraShake; +import org.geysermc.geyser.session.GeyserSession; + +import java.util.Collections; +import java.util.HashSet; +import java.util.Objects; +import java.util.Set; +import java.util.UUID; + +public class GeyserCameraData implements CameraData { + + private final GeyserSession session; + + @Getter + private CameraPerspective cameraPerspective; + + /** + * All fog effects that are currently applied to the client. + */ + private final Set appliedFog = new HashSet<>(); + + private final Set cameraLockOwners = new HashSet<>(); + + public GeyserCameraData(GeyserSession session) { + this.session = session; + } + + @Override + public void clearCameraInstructions() { + this.cameraPerspective = null; + CameraInstructionPacket packet = new CameraInstructionPacket(); + packet.setClear(true); + session.sendUpstreamPacket(packet); + } + + @Override + public void forceCameraPerspective(@NonNull CameraPerspective perspective) { + Objects.requireNonNull(perspective, "perspective cannot be null!"); + + if (perspective == cameraPerspective) { + return; // nothing to do + } + + this.cameraPerspective = perspective; + CameraInstructionPacket packet = new CameraInstructionPacket(); + CameraSetInstruction setInstruction = new CameraSetInstruction(); + + if (perspective == CameraPerspective.FREE) { + throw new IllegalArgumentException("Cannot force a stationary camera (CameraPerspective#FREE) on the player!" + + "Send a CameraPosition with an exact position instead"); + } + + setInstruction.setPreset(CameraDefinitions.getById(perspective.ordinal())); + packet.setSetInstruction(setInstruction); + session.sendUpstreamPacket(packet); + } + + @Override + public @Nullable CameraPerspective forcedCameraPerspective() { + return this.cameraPerspective; + } + + @Override + public void sendCameraFade(@NonNull CameraFade fade) { + Objects.requireNonNull(fade, "fade cannot be null!"); + CameraFadeInstruction fadeInstruction = new CameraFadeInstruction(); + fadeInstruction.setColor(fade.color()); + fadeInstruction.setTimeData( + new CameraFadeInstruction.TimeData( + fade.fadeInSeconds(), + fade.fadeHoldSeconds(), + fade.fadeOutSeconds() + ) + ); + + CameraInstructionPacket packet = new CameraInstructionPacket(); + packet.setFadeInstruction(fadeInstruction); + session.sendUpstreamPacket(packet); + } + + @Override + public void sendCameraPosition(@NonNull CameraPosition movement) { + Objects.requireNonNull(movement, "movement cannot be null!"); + this.cameraPerspective = CameraPerspective.FREE; // Movements only work with the free preset + CameraSetInstruction setInstruction = new CameraSetInstruction(); + + CameraEaseType easeType = movement.easeType(); + if (easeType != null) { + setInstruction.setEase(new CameraSetInstruction.EaseData( + CameraEase.fromName(easeType.id()), + movement.easeSeconds() + )); + } + + Vector3f facingPosition = movement.facingPosition(); + if (facingPosition != null) { + setInstruction.setFacing(facingPosition); + } + + setInstruction.setPos(movement.position()); + setInstruction.setRot(Vector2f.from(movement.rotationX(), movement.rotationY())); + setInstruction.setPreset(CameraDefinitions.getByFunctionality(movement.playerPositionForAudio(), movement.renderPlayerEffects())); + + CameraInstructionPacket packet = new CameraInstructionPacket(); + packet.setSetInstruction(setInstruction); + + // If present, also send the fade + CameraFade fade = movement.cameraFade(); + if (fade != null) { + CameraFadeInstruction fadeInstruction = new CameraFadeInstruction(); + fadeInstruction.setColor(fade.color()); + fadeInstruction.setTimeData( + new CameraFadeInstruction.TimeData( + fade.fadeInSeconds(), + fade.fadeHoldSeconds(), + fade.fadeOutSeconds() + ) + ); + packet.setFadeInstruction(fadeInstruction); + } + session.sendUpstreamPacket(packet); + } + + @Override + public void shakeCamera(float intensity, float duration, @NonNull CameraShake type) { + Objects.requireNonNull(type, "camera shake type must be non null!"); + CameraShakePacket packet = new CameraShakePacket(); + packet.setIntensity(intensity); + packet.setDuration(duration); + packet.setShakeType(type == CameraShake.POSITIONAL ? CameraShakeType.POSITIONAL : CameraShakeType.ROTATIONAL); + packet.setShakeAction(CameraShakeAction.ADD); + session.sendUpstreamPacket(packet); + } + + @Override + public void stopCameraShake() { + CameraShakePacket packet = new CameraShakePacket(); + // CameraShakeAction.STOP removes all types regardless of the given type, but regardless it can't be null + packet.setShakeType(CameraShakeType.POSITIONAL); + packet.setShakeAction(CameraShakeAction.STOP); + session.sendUpstreamPacket(packet); + } + + @Override + public void sendFog(String... fogNameSpaces) { + Collections.addAll(this.appliedFog, fogNameSpaces); + + PlayerFogPacket packet = new PlayerFogPacket(); + packet.getFogStack().addAll(this.appliedFog); + session.sendUpstreamPacket(packet); + } + + @Override + public void removeFog(String... fogNameSpaces) { + if (fogNameSpaces.length == 0) { + this.appliedFog.clear(); + } else { + for (String id : fogNameSpaces) { + this.appliedFog.remove(id); + } + } + PlayerFogPacket packet = new PlayerFogPacket(); + packet.getFogStack().addAll(this.appliedFog); + session.sendUpstreamPacket(packet); + } + + @Override + public @NonNull Set fogEffects() { + // Use a copy so that sendFog/removeFog can be called while iterating the returned set (avoid CME) + return Set.copyOf(this.appliedFog); + } + + @Override + public boolean lockCamera(boolean lock, @NonNull UUID owner) { + Objects.requireNonNull(owner, "owner cannot be null!"); + if (lock) { + this.cameraLockOwners.add(owner); + } else { + this.cameraLockOwners.remove(owner); + } + + session.lockInputs(isCameraLocked(), session.entities().isMovementLocked()); + return isCameraLocked(); + } + + @Override + public boolean isCameraLocked() { + return !this.cameraLockOwners.isEmpty(); + } +} \ No newline at end of file diff --git a/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraFade.java b/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraFade.java new file mode 100644 index 000000000..648e70c81 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraFade.java @@ -0,0 +1,104 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.impl.camera; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.common.value.qual.IntRange; +import org.geysermc.geyser.api.bedrock.camera.CameraFade; + +import java.awt.Color; +import java.util.Objects; + +public record GeyserCameraFade( + Color color, + float fadeInSeconds, + float fadeHoldSeconds, + float fadeOutSeconds + +) implements CameraFade { + public static class Builder implements CameraFade.Builder { + private Color color; + private float fadeInSeconds; + private float fadeHoldSeconds; + private float fadeOutSeconds; + + @Override + public CameraFade.Builder color(@NonNull Color color) { + Objects.requireNonNull(color, "color cannot be null!"); + this.color = color; + return this; + } + + @Override + public CameraFade.Builder fadeInSeconds(@IntRange(from = 0, to = 10) float fadeInSeconds) { + if (fadeInSeconds < 0f) { + throw new IllegalArgumentException("Fade in seconds must be at least 0 seconds"); + } + + if (fadeInSeconds > 10f) { + throw new IllegalArgumentException("Fade in seconds must be at most 10 seconds"); + } + this.fadeInSeconds = fadeInSeconds; + return this; + } + + @Override + public CameraFade.Builder fadeHoldSeconds(@IntRange(from = 0, to = 10) float fadeHoldSeconds) { + if (fadeHoldSeconds < 0f) { + throw new IllegalArgumentException("Fade hold seconds must be at least 0 seconds"); + } + + if (fadeHoldSeconds > 10f) { + throw new IllegalArgumentException("Fade hold seconds must be at most 10 seconds"); + } + this.fadeHoldSeconds = fadeHoldSeconds; + return this; + } + + @Override + public CameraFade.Builder fadeOutSeconds(@IntRange(from = 0, to = 10) float fadeOutSeconds) { + if (fadeOutSeconds < 0f) { + throw new IllegalArgumentException("Fade out seconds must be at least 0 seconds"); + } + + if (fadeOutSeconds > 10f) { + throw new IllegalArgumentException("Fade out seconds must be at most 10 seconds"); + } + this.fadeOutSeconds = fadeOutSeconds; + return this; + } + + @Override + public CameraFade build() { + Objects.requireNonNull(color, "color must be non null!"); + if (fadeInSeconds + fadeHoldSeconds + fadeOutSeconds < 0.5f) { + throw new IllegalArgumentException("Total fade time (in, hold, out) must be at least 0.5 seconds"); + } + + return new GeyserCameraFade(color, fadeInSeconds, fadeHoldSeconds, fadeOutSeconds); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraPosition.java b/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraPosition.java new file mode 100644 index 000000000..13b382465 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/impl/camera/GeyserCameraPosition.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.impl.camera; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; +import org.checkerframework.common.value.qual.IntRange; +import org.cloudburstmc.math.vector.Vector3f; +import org.geysermc.geyser.api.bedrock.camera.CameraEaseType; +import org.geysermc.geyser.api.bedrock.camera.CameraFade; +import org.geysermc.geyser.api.bedrock.camera.CameraPosition; + +import java.util.Objects; + +public record GeyserCameraPosition(CameraFade cameraFade, + boolean renderPlayerEffects, + boolean playerPositionForAudio, + CameraEaseType easeType, + float easeSeconds, + Vector3f position, + @IntRange(from = -90, to = 90) int rotationX, + int rotationY, + Vector3f facingPosition +) implements CameraPosition { + + public static class Builder implements CameraPosition.Builder { + private CameraFade cameraFade; + private boolean renderPlayerEffects; + private boolean playerPositionForAudio; + private CameraEaseType easeType; + private float easeSeconds; + private Vector3f position; + private @IntRange(from = -90, to = 90) int rotationX; + private int rotationY; + private Vector3f facingPosition; + + @Override + public CameraPosition.Builder cameraFade(@Nullable CameraFade cameraFade) { + this.cameraFade = cameraFade; + return this; + } + + @Override + public CameraPosition.Builder renderPlayerEffects(boolean renderPlayerEffects) { + this.renderPlayerEffects = renderPlayerEffects; + return this; + } + + @Override + public CameraPosition.Builder playerPositionForAudio(boolean playerPositionForAudio) { + this.playerPositionForAudio = playerPositionForAudio; + return this; + } + + @Override + public CameraPosition.Builder easeType(@Nullable CameraEaseType easeType) { + this.easeType = easeType; + return this; + } + + @Override + public CameraPosition.Builder easeSeconds(float easeSeconds) { + if (easeSeconds < 0) { + throw new IllegalArgumentException("Camera ease duration cannot be negative!"); + } + this.easeSeconds = easeSeconds; + return this; + } + + @Override + public CameraPosition.Builder position(@NonNull Vector3f position) { + Objects.requireNonNull(position, "camera position cannot be null!"); + this.position = position; + return this; + } + + @Override + public CameraPosition.Builder rotationX(int rotationX) { + if (rotationX < -90 || rotationX > 90) { + throw new IllegalArgumentException("x-axis rotation needs to be between -90 and 90 degrees."); + } + this.rotationX = rotationX; + return this; + } + + @Override + public CameraPosition.Builder rotationY(int rotationY) { + this.rotationY = rotationY; + return this; + } + + @Override + public CameraPosition.Builder facingPosition(@Nullable Vector3f facingPosition) { + this.facingPosition = facingPosition; + return this; + } + + @Override + public CameraPosition build() { + if (easeSeconds > 0 && easeType == null) { + throw new IllegalArgumentException("Camera ease type cannot be null if ease duration is greater than 0"); + } + + Objects.requireNonNull(position, "camera position must be non null!"); + return new GeyserCameraPosition(cameraFade, renderPlayerEffects, playerPositionForAudio, easeType, easeSeconds, position, rotationX, rotationY, facingPosition); + } + } +} diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java index c86c370bb..2906a9be3 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemData.java @@ -115,7 +115,7 @@ public class GeyserCustomItemData implements CustomItemData { return tags; } - public static class CustomItemDataBuilder implements Builder { + public static class Builder implements CustomItemData.Builder { protected String name = null; protected CustomItemOptions customItemOptions = null; diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java index 1434c49d9..966035743 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserCustomItemOptions.java @@ -37,7 +37,7 @@ public record GeyserCustomItemOptions(TriState unbreakable, boolean defaultItem) implements CustomItemOptions { @SuppressWarnings("OptionalUsedAsFieldOrParameterType") - public static class CustomItemOptionsBuilder implements CustomItemOptions.Builder { + public static class Builder implements CustomItemOptions.Builder { private TriState unbreakable = TriState.NOT_SET; private OptionalInt customModelData = OptionalInt.empty(); private OptionalInt damagePredicate = OptionalInt.empty(); diff --git a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java index 52b0ee7d0..bb4e60589 100644 --- a/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java +++ b/core/src/main/java/org/geysermc/geyser/item/GeyserNonVanillaCustomItemData.java @@ -59,7 +59,7 @@ public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData i private final boolean canAlwaysEat; private final boolean isChargeable; - public GeyserNonVanillaCustomItemData(NonVanillaCustomItemDataBuilder builder) { + public GeyserNonVanillaCustomItemData(Builder builder) { super(builder.name, builder.customItemOptions, builder.displayName, builder.icon, builder.allowOffhand, builder.displayHandheld, builder.textureSize, builder.renderOffsets, builder.tags); @@ -168,7 +168,7 @@ public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData i return isChargeable; } - public static class NonVanillaCustomItemDataBuilder extends GeyserCustomItemData.CustomItemDataBuilder implements NonVanillaCustomItemData.Builder { + public static class Builder extends GeyserCustomItemData.Builder implements NonVanillaCustomItemData.Builder { private String identifier = null; private int javaId = -1; @@ -197,49 +197,49 @@ public final class GeyserNonVanillaCustomItemData extends GeyserCustomItemData i private boolean chargeable = false; @Override - public NonVanillaCustomItemData.Builder name(@NonNull String name) { - return (NonVanillaCustomItemData.Builder) super.name(name); + public Builder name(@NonNull String name) { + return (Builder) super.name(name); } @Override - public NonVanillaCustomItemData.Builder customItemOptions(@NonNull CustomItemOptions customItemOptions) { + public Builder customItemOptions(@NonNull CustomItemOptions customItemOptions) { //Do nothing, as that value won't be read return this; } @Override - public NonVanillaCustomItemData.Builder allowOffhand(boolean allowOffhand) { - return (NonVanillaCustomItemData.Builder) super.allowOffhand(allowOffhand); + public Builder allowOffhand(boolean allowOffhand) { + return (Builder) super.allowOffhand(allowOffhand); } @Override - public NonVanillaCustomItemData.Builder displayHandheld(boolean displayHandheld) { - return (NonVanillaCustomItemData.Builder) super.displayHandheld(displayHandheld); + public Builder displayHandheld(boolean displayHandheld) { + return (Builder) super.displayHandheld(displayHandheld); } @Override - public NonVanillaCustomItemData.Builder displayName(@NonNull String displayName) { - return (NonVanillaCustomItemData.Builder) super.displayName(displayName); + public Builder displayName(@NonNull String displayName) { + return (Builder) super.displayName(displayName); } @Override - public NonVanillaCustomItemData.Builder icon(@NonNull String icon) { - return (NonVanillaCustomItemData.Builder) super.icon(icon); + public Builder icon(@NonNull String icon) { + return (Builder) super.icon(icon); } @Override - public NonVanillaCustomItemData.Builder textureSize(int textureSize) { - return (NonVanillaCustomItemData.Builder) super.textureSize(textureSize); + public Builder textureSize(int textureSize) { + return (Builder) super.textureSize(textureSize); } @Override - public NonVanillaCustomItemData.Builder renderOffsets(CustomRenderOffsets renderOffsets) { - return (NonVanillaCustomItemData.Builder) super.renderOffsets(renderOffsets); + public Builder renderOffsets(CustomRenderOffsets renderOffsets) { + return (Builder) super.renderOffsets(renderOffsets); } @Override - public NonVanillaCustomItemData.Builder tags(@Nullable Set tags) { - return (NonVanillaCustomItemData.Builder) super.tags(tags); + public Builder tags(@Nullable Set tags) { + return (Builder) super.tags(tags); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java index e401567e2..1fa863d55 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockComponents.java @@ -62,7 +62,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { boolean placeAir; Set tags; - private GeyserCustomBlockComponents(CustomBlockComponentsBuilder builder) { + private GeyserCustomBlockComponents(Builder builder) { this.selectionBox = builder.selectionBox; this.collisionBox = builder.collisionBox; this.displayName = builder.displayName; @@ -157,7 +157,7 @@ public class GeyserCustomBlockComponents implements CustomBlockComponents { return tags; } - public static class CustomBlockComponentsBuilder implements Builder { + public static class Builder implements CustomBlockComponents.Builder { protected BoxComponent selectionBox; protected BoxComponent collisionBox; protected String displayName; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java index dd58ebcb7..d717e33c5 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockData.java @@ -54,7 +54,7 @@ public class GeyserCustomBlockData implements CustomBlockData { private final Map defaultProperties; - GeyserCustomBlockData(CustomBlockDataBuilder builder) { + GeyserCustomBlockData(Builder builder) { this.name = builder.name; if (name == null) { throw new IllegalStateException("Name must be set"); @@ -141,10 +141,10 @@ public class GeyserCustomBlockData implements CustomBlockData { @Override public CustomBlockState.@NonNull Builder blockStateBuilder() { - return new GeyserCustomBlockState.CustomBlockStateBuilder(this); + return new GeyserCustomBlockState.Builder(this); } - public static class CustomBlockDataBuilder implements Builder { + public static class Builder implements CustomBlockData.Builder { private String name; private boolean includedInCreativeInventory; private CreativeCategory creativeCategory; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java index d147ffedc..b9a8fe5a2 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserCustomBlockState.java @@ -64,7 +64,7 @@ public class GeyserCustomBlockState implements CustomBlockState { } @RequiredArgsConstructor - public static class CustomBlockStateBuilder implements CustomBlockState.Builder { + public static class Builder implements CustomBlockState.Builder { private final CustomBlockData blockData; private final Object2ObjectMap properties = new Object2ObjectOpenHashMap<>(); diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserGeometryComponent.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserGeometryComponent.java index c23fc87a2..1e2d13ae6 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserGeometryComponent.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserGeometryComponent.java @@ -37,7 +37,7 @@ public class GeyserGeometryComponent implements GeometryComponent { private final String identifier; private final Map boneVisibility; - GeyserGeometryComponent(GeometryComponentBuilder builder) { + GeyserGeometryComponent(Builder builder) { this.identifier = builder.identifier; this.boneVisibility = builder.boneVisibility; } @@ -52,18 +52,18 @@ public class GeyserGeometryComponent implements GeometryComponent { return boneVisibility; } - public static class GeometryComponentBuilder implements Builder { + public static class Builder implements GeometryComponent.Builder { private String identifier; private Map boneVisibility; @Override - public GeometryComponent.Builder identifier(@NonNull String identifier) { + public Builder identifier(@NonNull String identifier) { this.identifier = identifier; return this; } @Override - public GeometryComponent.Builder boneVisibility(@Nullable Map boneVisibility) { + public Builder boneVisibility(@Nullable Map boneVisibility) { this.boneVisibility = boneVisibility; return this; } diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java index 5604a543e..8028a4355 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserJavaBlockState.java @@ -18,7 +18,7 @@ public class GeyserJavaBlockState implements JavaBlockState { String pistonBehavior; boolean hasBlockEntity; - private GeyserJavaBlockState(JavaBlockStateBuilder builder) { + private GeyserJavaBlockState(Builder builder) { this.identifier = builder.identifier; this.javaId = builder.javaId; this.stateGroupId = builder.stateGroupId; @@ -81,7 +81,7 @@ public class GeyserJavaBlockState implements JavaBlockState { return hasBlockEntity; } - public static class JavaBlockStateBuilder implements Builder { + public static class Builder implements JavaBlockState.Builder { private String identifier; private int javaId; private int stateGroupId; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserMaterialInstance.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserMaterialInstance.java index 527b8fe79..acc16bf58 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserMaterialInstance.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserMaterialInstance.java @@ -36,7 +36,7 @@ public class GeyserMaterialInstance implements MaterialInstance { private final boolean faceDimming; private final boolean ambientOcclusion; - GeyserMaterialInstance(MaterialInstanceBuilder builder) { + GeyserMaterialInstance(Builder builder) { this.texture = builder.texture; this.renderMethod = builder.renderMethod; this.faceDimming = builder.faceDimming; @@ -63,7 +63,7 @@ public class GeyserMaterialInstance implements MaterialInstance { return ambientOcclusion; } - public static class MaterialInstanceBuilder implements Builder { + public static class Builder implements MaterialInstance.Builder { private String texture; private String renderMethod; private boolean faceDimming; diff --git a/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java index 8b5056a6f..1f557d0b0 100644 --- a/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java +++ b/core/src/main/java/org/geysermc/geyser/level/block/GeyserNonVanillaCustomBlockData.java @@ -37,7 +37,7 @@ import java.util.List; public class GeyserNonVanillaCustomBlockData extends GeyserCustomBlockData implements NonVanillaCustomBlockData { private final String namespace; - GeyserNonVanillaCustomBlockData(NonVanillaCustomBlockDataBuilder builder) { + GeyserNonVanillaCustomBlockData(Builder builder) { super(builder); this.namespace = builder.namespace; @@ -56,58 +56,58 @@ public class GeyserNonVanillaCustomBlockData extends GeyserCustomBlockData imple return this.namespace; } - public static class NonVanillaCustomBlockDataBuilder extends CustomBlockDataBuilder implements NonVanillaCustomBlockData.Builder { + public static class Builder extends GeyserCustomBlockData.Builder implements NonVanillaCustomBlockData.Builder { private String namespace; @Override - public NonVanillaCustomBlockDataBuilder namespace(@NonNull String namespace) { + public Builder namespace(@NonNull String namespace) { this.namespace = namespace; return this; } @Override - public NonVanillaCustomBlockDataBuilder name(@NonNull String name) { - return (NonVanillaCustomBlockDataBuilder) super.name(name); + public Builder name(@NonNull String name) { + return (Builder) super.name(name); } @Override - public NonVanillaCustomBlockDataBuilder includedInCreativeInventory(boolean includedInCreativeInventory) { - return (NonVanillaCustomBlockDataBuilder) super.includedInCreativeInventory(includedInCreativeInventory); + public Builder includedInCreativeInventory(boolean includedInCreativeInventory) { + return (Builder) super.includedInCreativeInventory(includedInCreativeInventory); } @Override - public NonVanillaCustomBlockDataBuilder creativeCategory(@Nullable CreativeCategory creativeCategories) { - return (NonVanillaCustomBlockDataBuilder) super.creativeCategory(creativeCategories); + public Builder creativeCategory(@Nullable CreativeCategory creativeCategories) { + return (Builder) super.creativeCategory(creativeCategories); } @Override - public NonVanillaCustomBlockDataBuilder creativeGroup(@Nullable String creativeGroup) { - return (NonVanillaCustomBlockDataBuilder) super.creativeGroup(creativeGroup); + public Builder creativeGroup(@Nullable String creativeGroup) { + return (Builder) super.creativeGroup(creativeGroup); } @Override - public NonVanillaCustomBlockDataBuilder components(@NonNull CustomBlockComponents components) { - return (NonVanillaCustomBlockDataBuilder) super.components(components); + public Builder components(@NonNull CustomBlockComponents components) { + return (Builder) super.components(components); } @Override - public NonVanillaCustomBlockDataBuilder booleanProperty(@NonNull String propertyName) { - return (NonVanillaCustomBlockDataBuilder) super.booleanProperty(propertyName); + public Builder booleanProperty(@NonNull String propertyName) { + return (Builder) super.booleanProperty(propertyName); } @Override - public NonVanillaCustomBlockDataBuilder intProperty(@NonNull String propertyName, List values) { - return (NonVanillaCustomBlockDataBuilder) super.intProperty(propertyName, values); + public Builder intProperty(@NonNull String propertyName, List values) { + return (Builder) super.intProperty(propertyName, values); } @Override - public NonVanillaCustomBlockDataBuilder stringProperty(@NonNull String propertyName, List values) { - return (NonVanillaCustomBlockDataBuilder) super.stringProperty(propertyName, values); + public Builder stringProperty(@NonNull String propertyName, List values) { + return (Builder) super.stringProperty(propertyName, values); } @Override - public NonVanillaCustomBlockDataBuilder permutations(@NonNull List permutations) { - return (NonVanillaCustomBlockDataBuilder) super.permutations(permutations); + public Builder permutations(@NonNull List permutations) { + return (Builder) super.permutations(permutations); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java index cf794261b..0cfcc3d46 100644 --- a/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/LoggingPacketHandler.java @@ -100,6 +100,16 @@ public class LoggingPacketHandler implements BedrockPacketHandler { return defaultHandler(packet); } + @Override + public PacketSignal handle(CameraPresetsPacket packet) { + return defaultHandler(packet); + } + + @Override + public PacketSignal handle(CameraInstructionPacket packet) { + return defaultHandler(packet); + } + @Override public PacketSignal handle(CommandBlockUpdatePacket packet) { return defaultHandler(packet); diff --git a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java index 13d7a4d77..4b159438c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java +++ b/core/src/main/java/org/geysermc/geyser/registry/loader/ProviderRegistryLoader.java @@ -25,6 +25,8 @@ package org.geysermc.geyser.registry.loader; +import org.geysermc.geyser.api.bedrock.camera.CameraFade; +import org.geysermc.geyser.api.bedrock.camera.CameraPosition; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.NonVanillaCustomBlockData; import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; @@ -38,6 +40,8 @@ import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.item.custom.NonVanillaCustomItemData; import org.geysermc.geyser.api.pack.PathPackCodec; +import org.geysermc.geyser.impl.camera.GeyserCameraFade; +import org.geysermc.geyser.impl.camera.GeyserCameraPosition; import org.geysermc.geyser.command.GeyserCommandManager; import org.geysermc.geyser.event.GeyserEventRegistrar; import org.geysermc.geyser.item.GeyserCustomItemData; @@ -65,20 +69,24 @@ public class ProviderRegistryLoader implements RegistryLoader, Prov // misc providers.put(Command.Builder.class, args -> new GeyserCommandManager.CommandBuilder<>((Extension) args[0])); - providers.put(CustomBlockComponents.Builder.class, args -> new GeyserCustomBlockComponents.CustomBlockComponentsBuilder()); - providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.CustomBlockDataBuilder()); - providers.put(JavaBlockState.Builder.class, args -> new GeyserJavaBlockState.JavaBlockStateBuilder()); - providers.put(NonVanillaCustomBlockData.Builder.class, args -> new GeyserNonVanillaCustomBlockData.NonVanillaCustomBlockDataBuilder()); - providers.put(MaterialInstance.Builder.class, args -> new GeyserMaterialInstance.MaterialInstanceBuilder()); - providers.put(GeometryComponent.Builder.class, args -> new GeyserGeometryComponent.GeometryComponentBuilder()); + providers.put(CustomBlockComponents.Builder.class, args -> new GeyserCustomBlockComponents.Builder()); + providers.put(CustomBlockData.Builder.class, args -> new GeyserCustomBlockData.Builder()); + providers.put(JavaBlockState.Builder.class, args -> new GeyserJavaBlockState.Builder()); + providers.put(NonVanillaCustomBlockData.Builder.class, args -> new GeyserNonVanillaCustomBlockData.Builder()); + providers.put(MaterialInstance.Builder.class, args -> new GeyserMaterialInstance.Builder()); + providers.put(GeometryComponent.Builder.class, args -> new GeyserGeometryComponent.Builder()); providers.put(EventRegistrar.class, args -> new GeyserEventRegistrar(args[0])); providers.put(PathPackCodec.class, args -> new GeyserPathPackCodec((Path) args[0])); // items - providers.put(CustomItemData.Builder.class, args -> new GeyserCustomItemData.CustomItemDataBuilder()); - providers.put(CustomItemOptions.Builder.class, args -> new GeyserCustomItemOptions.CustomItemOptionsBuilder()); - providers.put(NonVanillaCustomItemData.Builder.class, args -> new GeyserNonVanillaCustomItemData.NonVanillaCustomItemDataBuilder()); + providers.put(CustomItemData.Builder.class, args -> new GeyserCustomItemData.Builder()); + providers.put(CustomItemOptions.Builder.class, args -> new GeyserCustomItemOptions.Builder()); + providers.put(NonVanillaCustomItemData.Builder.class, args -> new GeyserNonVanillaCustomItemData.Builder()); + + // cameras + providers.put(CameraFade.Builder.class, args -> new GeyserCameraFade.Builder()); + providers.put(CameraPosition.Builder.class, args -> new GeyserCameraPosition.Builder()); return providers; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java index 1a498c3fa..0bc55c7b1 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java +++ b/core/src/main/java/org/geysermc/geyser/registry/mappings/versions/MappingsReader_v1.java @@ -35,17 +35,22 @@ import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.block.custom.CustomBlockData; import org.geysermc.geyser.api.block.custom.CustomBlockPermutation; import org.geysermc.geyser.api.block.custom.CustomBlockState; -import org.geysermc.geyser.api.block.custom.component.*; +import org.geysermc.geyser.api.block.custom.component.BoxComponent; +import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; +import org.geysermc.geyser.api.block.custom.component.GeometryComponent; +import org.geysermc.geyser.api.block.custom.component.MaterialInstance; +import org.geysermc.geyser.api.block.custom.component.PlacementConditions; import org.geysermc.geyser.api.block.custom.component.PlacementConditions.BlockFilterType; import org.geysermc.geyser.api.block.custom.component.PlacementConditions.Face; +import org.geysermc.geyser.api.block.custom.component.TransformationComponent; import org.geysermc.geyser.api.item.custom.CustomItemData; import org.geysermc.geyser.api.item.custom.CustomItemOptions; import org.geysermc.geyser.api.util.CreativeCategory; import org.geysermc.geyser.item.exception.InvalidCustomMappingsFileException; -import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; -import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; -import org.geysermc.geyser.level.block.GeyserGeometryComponent.GeometryComponentBuilder; -import org.geysermc.geyser.level.block.GeyserMaterialInstance.MaterialInstanceBuilder; +import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; +import org.geysermc.geyser.level.block.GeyserCustomBlockData; +import org.geysermc.geyser.level.block.GeyserGeometryComponent; +import org.geysermc.geyser.level.block.GeyserMaterialInstance; import org.geysermc.geyser.level.physics.BoundingBox; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.util.CustomBlockComponentsMapping; @@ -57,7 +62,14 @@ import org.geysermc.geyser.util.BlockUtils; import org.geysermc.geyser.util.MathUtils; import java.nio.file.Path; -import java.util.*; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.function.BiConsumer; import java.util.function.Function; import java.util.function.Predicate; @@ -248,7 +260,7 @@ public class MappingsReader_v1 extends MappingsReader { boolean onlyOverrideStates = node.has("only_override_states") && node.get("only_override_states").asBoolean(); // Create the data for the overall block - CustomBlockData.Builder customBlockDataBuilder = new CustomBlockDataBuilder() + CustomBlockData.Builder customBlockDataBuilder = new GeyserCustomBlockData.Builder() .name(name) .includedInCreativeInventory(includedInCreativeInventory) .creativeCategory(creativeCategory) @@ -360,7 +372,7 @@ public class MappingsReader_v1 extends MappingsReader { int id = BlockRegistries.JAVA_IDENTIFIER_TO_ID.getOrDefault(stateKey, -1); BoxComponent boxComponent = createBoxComponent(id); BoxComponent extendedBoxComponent = createExtendedBoxComponent(id); - CustomBlockComponents.Builder builder = new CustomBlockComponentsBuilder() + CustomBlockComponents.Builder builder = new GeyserCustomBlockComponents.Builder() .collisionBox(boxComponent) .selectionBox(boxComponent); @@ -392,12 +404,12 @@ public class MappingsReader_v1 extends MappingsReader { if (node.has("geometry")) { if (node.get("geometry").isTextual()) { - builder.geometry(new GeometryComponentBuilder() + builder.geometry(new GeyserGeometryComponent.Builder() .identifier(node.get("geometry").asText()) .build()); } else { JsonNode geometry = node.get("geometry"); - GeometryComponentBuilder geometryBuilder = new GeometryComponentBuilder(); + GeometryComponent.Builder geometryBuilder = new GeyserGeometryComponent.Builder(); if (geometry.has("identifier")) { geometryBuilder.identifier(geometry.get("identifier").asText()); } @@ -654,7 +666,7 @@ public class MappingsReader_v1 extends MappingsReader { ambientOcclusion = node.get("ambient_occlusion").asBoolean(); } - return new MaterialInstanceBuilder() + return new GeyserMaterialInstance.Builder() .texture(texture) .renderMethod(renderMethod) .faceDimming(faceDimming) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index e4f45ac85..2a9948f45 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -23,11 +23,11 @@ import org.geysermc.geyser.api.block.custom.property.CustomBlockProperty; import org.geysermc.geyser.api.block.custom.property.PropertyType; import org.geysermc.geyser.api.event.lifecycle.GeyserDefineCustomBlocksEvent; import org.geysermc.geyser.api.util.CreativeCategory; +import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; +import org.geysermc.geyser.level.block.GeyserCustomBlockData; import org.geysermc.geyser.level.block.GeyserCustomBlockState; -import org.geysermc.geyser.level.block.GeyserCustomBlockComponents.CustomBlockComponentsBuilder; -import org.geysermc.geyser.level.block.GeyserCustomBlockData.CustomBlockDataBuilder; -import org.geysermc.geyser.level.block.GeyserGeometryComponent.GeometryComponentBuilder; -import org.geysermc.geyser.level.block.GeyserMaterialInstance.MaterialInstanceBuilder; +import org.geysermc.geyser.level.block.GeyserGeometryComponent; +import org.geysermc.geyser.level.block.GeyserMaterialInstance; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; @@ -479,20 +479,20 @@ public class CustomBlockRegistryPopulator { } private static CustomBlockData createExtendedCollisionBlock(BoxComponent boxComponent, int extendedCollisionBlock) { - return new CustomBlockDataBuilder() + return new GeyserCustomBlockData.Builder() .name("extended_collision_" + extendedCollisionBlock) .components( - new CustomBlockComponentsBuilder() + new GeyserCustomBlockComponents.Builder() .collisionBox(boxComponent) .selectionBox(BoxComponent.emptyBox()) - .materialInstance("*", new MaterialInstanceBuilder() + .materialInstance("*", new GeyserMaterialInstance.Builder() .texture("glass") .renderMethod("alpha_test") .faceDimming(false) .ambientOcclusion(false) .build()) .lightDampening(0) - .geometry(new GeometryComponentBuilder() + .geometry(new GeyserGeometryComponent.Builder() .identifier("geometry.invisible") .build()) .build()) diff --git a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java index 5fe8a0edf..9e85f30ff 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java +++ b/core/src/main/java/org/geysermc/geyser/registry/type/CustomSkull.java @@ -34,8 +34,8 @@ import org.geysermc.geyser.api.block.custom.component.CustomBlockComponents; import org.geysermc.geyser.api.block.custom.component.TransformationComponent; import org.geysermc.geyser.level.block.GeyserCustomBlockComponents; import org.geysermc.geyser.level.block.GeyserCustomBlockData; -import org.geysermc.geyser.level.block.GeyserGeometryComponent.GeometryComponentBuilder; -import org.geysermc.geyser.level.block.GeyserMaterialInstance.MaterialInstanceBuilder; +import org.geysermc.geyser.level.block.GeyserGeometryComponent; +import org.geysermc.geyser.level.block.GeyserMaterialInstance; import java.util.ArrayList; import java.util.List; @@ -65,9 +65,9 @@ public class CustomSkull { public CustomSkull(String skinHash) { this.skinHash = skinHash; - CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() + CustomBlockComponents components = new GeyserCustomBlockComponents.Builder() .destructibleByMining(1.5f) - .materialInstance("*", new MaterialInstanceBuilder() + .materialInstance("*", new GeyserMaterialInstance.Builder() .texture("geyser." + skinHash + "_player_skin") .renderMethod("alpha_test") .faceDimming(true) @@ -82,7 +82,7 @@ public class CustomSkull { addFloorPermutations(permutations); addWallPermutations(permutations); - customBlockData = new GeyserCustomBlockData.CustomBlockDataBuilder() + customBlockData = new GeyserCustomBlockData.Builder() .name("player_skull_" + skinHash) .components(components) .intProperty(BITS_A_PROPERTY, IntStream.rangeClosed(0, 6).boxed().toList()) // This gives us exactly 21 block states @@ -114,8 +114,8 @@ public class CustomSkull { } private void addDefaultPermutation(List permutations) { - CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() - .geometry(new GeometryComponentBuilder() + CustomBlockComponents components = new GeyserCustomBlockComponents.Builder() + .geometry(new GeyserGeometryComponent.Builder() .identifier("geometry.geyser.player_skull_hand") .build()) .transformation(new TransformationComponent(0, 180, 0)) @@ -131,10 +131,10 @@ public class CustomSkull { for (int quadrant = 0; quadrant < 4; quadrant++) { for (int i = 0; i < 4; i++) { int floorRotation = 4 * quadrant + i; - CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() + CustomBlockComponents components = new GeyserCustomBlockComponents.Builder() .selectionBox(FLOOR_BOX) .collisionBox(FLOOR_BOX) - .geometry(new GeometryComponentBuilder() + .geometry(new GeyserGeometryComponent.Builder() .identifier("geometry.geyser.player_skull_floor_" + quadrantNames[i]) .build()) .transformation(new TransformationComponent(0, ROTATIONS[quadrant], 0)) @@ -150,10 +150,10 @@ public class CustomSkull { private void addWallPermutations(List permutations) { for (int i = 0; i < 4; i++) { - CustomBlockComponents components = new GeyserCustomBlockComponents.CustomBlockComponentsBuilder() + CustomBlockComponents components = new GeyserCustomBlockComponents.Builder() .selectionBox(WALL_BOX) .collisionBox(WALL_BOX) - .geometry(new GeometryComponentBuilder() + .geometry(new GeyserGeometryComponent.Builder() .identifier("geometry.geyser.player_skull_wall") .build()) .transformation(new TransformationComponent(0, ROTATIONS[i], 0)) diff --git a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java index 5501e990e..d40b07939 100644 --- a/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java +++ b/core/src/main/java/org/geysermc/geyser/session/GeyserSession.java @@ -101,8 +101,10 @@ import org.geysermc.floodgate.crypto.FloodgateCipher; import org.geysermc.floodgate.util.BedrockData; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.bedrock.camera.CameraData; import org.geysermc.geyser.api.bedrock.camera.CameraShake; import org.geysermc.geyser.api.connection.GeyserConnection; +import org.geysermc.geyser.api.entity.EntityData; import org.geysermc.geyser.api.entity.type.GeyserEntity; import org.geysermc.geyser.api.entity.type.player.GeyserPlayerEntity; import org.geysermc.geyser.api.event.bedrock.SessionDisconnectEvent; @@ -110,10 +112,13 @@ import org.geysermc.geyser.api.event.bedrock.SessionLoginEvent; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.api.network.RemoteServer; import org.geysermc.geyser.api.util.PlatformType; +import org.geysermc.geyser.impl.camera.CameraDefinitions; +import org.geysermc.geyser.impl.camera.GeyserCameraData; import org.geysermc.geyser.command.GeyserCommandSource; import org.geysermc.geyser.configuration.EmoteOffhandWorkaroundOption; import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.entity.EntityDefinitions; +import org.geysermc.geyser.entity.GeyserEntityData; import org.geysermc.geyser.entity.attribute.GeyserAttributeType; import org.geysermc.geyser.entity.type.Entity; import org.geysermc.geyser.entity.type.ItemFrameEntity; @@ -151,7 +156,16 @@ import java.net.ConnectException; import java.net.InetSocketAddress; import java.nio.charset.StandardCharsets; import java.time.Instant; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.BitSet; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.Set; +import java.util.UUID; import java.util.concurrent.CompletableFuture; import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ScheduledFuture; @@ -550,11 +564,6 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Setter private boolean waitingForStatistics = false; - /** - * All fog effects that are currently applied to the client. - */ - private final Set appliedFog = new HashSet<>(); - private final Set emotes; /** @@ -586,6 +595,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { */ private final Queue keepAliveCache = new ConcurrentLinkedQueue<>(); + private final GeyserCameraData cameraData; + + private final GeyserEntityData entityData; + private MinecraftProtocol protocol; public GeyserSession(GeyserImpl geyser, BedrockServerSession bedrockServerSession, EventLoop eventLoop) { @@ -607,6 +620,8 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { this.skullCache = new SkullCache(this); this.tagCache = new TagCache(); this.worldCache = new WorldCache(this); + this.cameraData = new GeyserCameraData(this); + this.entityData = new GeyserEntityData(this); this.worldBorder = new WorldBorder(this); @@ -667,6 +682,10 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { entityPacket.setIdentifiers(Registries.BEDROCK_ENTITY_IDENTIFIERS.get()); upstream.sendPacket(entityPacket); + CameraPresetsPacket cameraPresetsPacket = new CameraPresetsPacket(); + cameraPresetsPacket.getPresets().addAll(CameraDefinitions.CAMERA_PRESETS); + upstream.sendPacket(cameraPresetsPacket); + CreativeContentPacket creativePacket = new CreativeContentPacket(); creativePacket.setContents(this.itemMappings.getCreativeItems()); upstream.sendPacket(creativePacket); @@ -1182,12 +1201,12 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { // Set the mood if (shouldShowFog && !isInWorldBorderWarningArea) { isInWorldBorderWarningArea = true; - sendFog("minecraft:fog_crimson_forest"); + camera().sendFog("minecraft:fog_crimson_forest"); } } if (!shouldShowFog && isInWorldBorderWarningArea) { // Clear fog as we are outside the world border now - removeFog("minecraft:fog_crimson_forest"); + camera().removeFog("minecraft:fog_crimson_forest"); isInWorldBorderWarningArea = false; } @@ -1480,6 +1499,7 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { private void startGame() { this.upstream.getCodecHelper().setItemDefinitions(this.itemMappings); this.upstream.getCodecHelper().setBlockDefinitions((DefinitionRegistry) this.blockMappings); //FIXME + this.upstream.getCodecHelper().setCameraPresetDefinitions(CameraDefinitions.CAMERA_DEFINITIONS); StartGamePacket startGamePacket = new StartGamePacket(); startGamePacket.setUniqueEntityId(playerEntity.getGeyserId()); @@ -1980,72 +2000,66 @@ public class GeyserSession implements GeyserConnection, GeyserCommandSource { @Override public @NonNull CompletableFuture<@Nullable GeyserEntity> entityByJavaId(@NonNegative int javaId) { - CompletableFuture future = new CompletableFuture<>(); - ensureInEventLoop(() -> future.complete(this.entityCache.getEntityByJavaId(javaId))); - return future; + return entities().entityByJavaId(javaId); } @Override public void showEmote(@NonNull GeyserPlayerEntity emoter, @NonNull String emoteId) { - Entity entity = (Entity) emoter; - if (entity.getSession() != this) { - throw new IllegalStateException("Given entity must be from this session!"); + entities().showEmote(emoter, emoteId); + } + + public void lockInputs(boolean camera, boolean movement) { + UpdateClientInputLocksPacket packet = new UpdateClientInputLocksPacket(); + final int cameraOffset = 1 << 1; + final int movementOffset = 1 << 2; + + int result = 0; + if (camera) { + result |= cameraOffset; + } + if (movement) { + result |= movementOffset; } - EmotePacket packet = new EmotePacket(); - packet.setRuntimeEntityId(entity.getGeyserId()); - packet.setXuid(""); - packet.setPlatformId(""); // BDS sends empty - packet.setEmoteId(emoteId); + packet.setLockComponentData(result); + packet.setServerPosition(this.playerEntity.getPosition()); + sendUpstreamPacket(packet); } + @Override + public @NonNull CameraData camera() { + return this.cameraData; + } + + @Override + public @NonNull EntityData entities() { + return this.entityData; + } + @Override public void shakeCamera(float intensity, float duration, @NonNull CameraShake type) { - CameraShakePacket packet = new CameraShakePacket(); - packet.setIntensity(intensity); - packet.setDuration(duration); - packet.setShakeType(type == CameraShake.POSITIONAL ? CameraShakeType.POSITIONAL : CameraShakeType.ROTATIONAL); - packet.setShakeAction(CameraShakeAction.ADD); - sendUpstreamPacket(packet); + this.cameraData.shakeCamera(intensity, duration, type); } @Override public void stopCameraShake() { - CameraShakePacket packet = new CameraShakePacket(); - // CameraShakeAction.STOP removes all types regardless of the given type, but regardless it can't be null - packet.setShakeType(CameraShakeType.POSITIONAL); - packet.setShakeAction(CameraShakeAction.STOP); - sendUpstreamPacket(packet); + this.cameraData.stopCameraShake(); } @Override public void sendFog(String... fogNameSpaces) { - Collections.addAll(this.appliedFog, fogNameSpaces); - - PlayerFogPacket packet = new PlayerFogPacket(); - packet.getFogStack().addAll(this.appliedFog); - sendUpstreamPacket(packet); + this.cameraData.sendFog(fogNameSpaces); } @Override public void removeFog(String... fogNameSpaces) { - if (fogNameSpaces.length == 0) { - this.appliedFog.clear(); - } else { - for (String id : fogNameSpaces) { - this.appliedFog.remove(id); - } - } - PlayerFogPacket packet = new PlayerFogPacket(); - packet.getFogStack().addAll(this.appliedFog); - sendUpstreamPacket(packet); + this.cameraData.removeFog(fogNameSpaces); } @Override public @NonNull Set fogEffects() { - // Use a copy so that sendFog/removeFog can be called while iterating the returned set (avoid CME) - return Set.copyOf(this.appliedFog); + return this.cameraData.fogEffects(); } public void addCommandEnum(String name, String enums) { diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java index 377f1d2cf..23c19e84f 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/JavaLoginTranslator.java @@ -139,7 +139,7 @@ public class JavaLoginTranslator extends PacketTranslator Date: Fri, 2 Feb 2024 23:25:50 +0800 Subject: [PATCH 78/86] =?UTF-8?q?Use=20multiple=20channels=20at=20startup,?= =?UTF-8?q?=20fix=20the=20occasional=20issue=20of=20all=20pla=E2=80=A6=20(?= =?UTF-8?q?#4329)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Use multiple channels at startup, fix the occasional issue of all players getting disconnected. * Standardized shutdown periods and refactored network handlers for improved consistency. * tiny fix * Let's use the system property --------- Co-authored-by: chris --- .../geyser/network/netty/Bootstraps.java | 130 ++++++++++++++++++ .../geyser/network/netty/GeyserServer.java | 61 ++++---- .../network/netty/handler/RakPingHandler.java | 2 +- 3 files changed, 168 insertions(+), 25 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/network/netty/Bootstraps.java diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/Bootstraps.java b/core/src/main/java/org/geysermc/geyser/network/netty/Bootstraps.java new file mode 100644 index 000000000..9ffc45650 --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/network/netty/Bootstraps.java @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2019-2023 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.network.netty; + +import io.netty.bootstrap.AbstractBootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.epoll.Native; +import io.netty.channel.unix.UnixChannelOption; +import lombok.experimental.UtilityClass; + +import java.util.Optional; +import java.util.concurrent.CompletableFuture; + +@SuppressWarnings("OptionalUsedAsFieldOrParameterType") +@UtilityClass +public final class Bootstraps { + private static final Optional KERNEL_VERSION; + + // The REUSEPORT_AVAILABLE socket option is available starting from kernel version 3.9. + // This option allows multiple sockets to listen on the same IP address and port without conflict. + private static final int[] REUSEPORT_VERSION = new int[]{3, 9, 0}; + private static final boolean REUSEPORT_AVAILABLE; + + static { + String kernelVersion; + try { + kernelVersion = Native.KERNEL_VERSION; + } catch (Throwable e) { + kernelVersion = null; + } + if (kernelVersion != null && kernelVersion.contains("-")) { + int index = kernelVersion.indexOf('-'); + if (index > -1) { + kernelVersion = kernelVersion.substring(0, index); + } + int[] kernelVer = fromString(kernelVersion); + KERNEL_VERSION = Optional.of(kernelVer); + REUSEPORT_AVAILABLE = checkVersion(kernelVer, 0); + } else { + KERNEL_VERSION = Optional.empty(); + REUSEPORT_AVAILABLE = false; + } + } + + public static Optional getKernelVersion() { + return KERNEL_VERSION; + } + + public static boolean isReusePortAvailable() { + return REUSEPORT_AVAILABLE; + } + + @SuppressWarnings({"rawtypes, unchecked"}) + public static void setupBootstrap(AbstractBootstrap bootstrap) { + if (REUSEPORT_AVAILABLE) { + bootstrap.option(UnixChannelOption.SO_REUSEPORT, true); + } + } + + private static int[] fromString(String ver) { + String[] parts = ver.split("\\."); + if (parts.length < 2) { + throw new IllegalArgumentException("At least 2 version numbers required"); + } + + return new int[]{ + Integer.parseInt(parts[0]), + Integer.parseInt(parts[1]), + parts.length == 2 ? 0 : Integer.parseInt(parts[2]) + }; + } + + private static boolean checkVersion(int[] ver, int i) { + if (ver[i] > REUSEPORT_VERSION[i]) { + return true; + } else if (ver[i] == REUSEPORT_VERSION[i]) { + if (ver.length == (i + 1)) { + return true; + } else { + return checkVersion(ver, i + 1); + } + } + return false; + } + + public static CompletableFuture allOf(ChannelFuture... futures) { + if (futures == null || futures.length == 0) { + return CompletableFuture.completedFuture(null); + } + @SuppressWarnings("unchecked") + CompletableFuture[] completableFutures = new CompletableFuture[futures.length]; + for (int i = 0; i < futures.length; i++) { + ChannelFuture channelFuture = futures[i]; + CompletableFuture completableFuture = new CompletableFuture<>(); + channelFuture.addListener(future -> { + if (future.cause() != null) { + completableFuture.completeExceptionally(future.cause()); + } + completableFuture.complete(channelFuture.channel()); + }); + completableFutures[i] = completableFuture; + } + + return CompletableFuture.allOf(completableFutures); + } +} diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java index 401a7f2cf..ea1dcb509 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/GeyserServer.java @@ -94,13 +94,16 @@ public final class GeyserServer { private final GeyserImpl geyser; private EventLoopGroup group; + // Split childGroup may improve IO + private EventLoopGroup childGroup; private final ServerBootstrap bootstrap; private EventLoopGroup playerGroup; @Getter private final ExpiringMap proxiedAddresses; + private final int listenCount; - private ChannelFuture bootstrapFuture; + private ChannelFuture[] bootstrapFutures; /** * The port to broadcast in the pong. This can be different from the port the server is bound to, e.g. due to port forwarding. @@ -109,9 +112,14 @@ public final class GeyserServer { public GeyserServer(GeyserImpl geyser, int threadCount) { this.geyser = geyser; - this.group = TRANSPORT.eventLoopGroupFactory().apply(threadCount); + this.listenCount = Bootstraps.isReusePortAvailable() ? Integer.getInteger("Geyser.ListenCount", 2) : 1; + GeyserImpl.getInstance().getLogger().debug("Listen thread count: " + listenCount); + this.group = TRANSPORT.eventLoopGroupFactory().apply(listenCount); + this.childGroup = TRANSPORT.eventLoopGroupFactory().apply(threadCount); - this.bootstrap = this.createBootstrap(this.group); + this.bootstrap = this.createBootstrap(); + // setup SO_REUSEPORT if exists + Bootstraps.setupBootstrap(this.bootstrap); if (this.geyser.getConfig().getBedrock().isEnableProxyProtocol()) { this.proxiedAddresses = ExpiringMap.builder() @@ -130,46 +138,51 @@ public final class GeyserServer { } public CompletableFuture bind(InetSocketAddress address) { - CompletableFuture future = new CompletableFuture<>(); - this.bootstrapFuture = this.bootstrap.bind(address).addListener(bindResult -> { - if (bindResult.cause() != null) { - future.completeExceptionally(bindResult.cause()); - return; - } - future.complete(null); - }); + bootstrapFutures = new ChannelFuture[listenCount]; + for (int i = 0; i < listenCount; i++) { + ChannelFuture future = bootstrap.bind(address); + addHandlers(future); + bootstrapFutures[i] = future; + } - Channel channel = this.bootstrapFuture.channel(); + return Bootstraps.allOf(bootstrapFutures); + } + private void addHandlers(ChannelFuture future) { + Channel channel = future.channel(); // Add our ping handler channel.pipeline() .addFirst(RakConnectionRequestHandler.NAME, new RakConnectionRequestHandler(this)) .addAfter(RakServerOfflineHandler.NAME, RakPingHandler.NAME, new RakPingHandler(this)); - + // Add proxy handler if (this.geyser.getConfig().getBedrock().isEnableProxyProtocol()) { channel.pipeline().addFirst("proxy-protocol-decoder", new ProxyServerHandler()); } - - return future; } public void shutdown() { try { - Future future1 = this.group.shutdownGracefully(SHUTDOWN_QUIET_PERIOD_MS, SHUTDOWN_TIMEOUT_MS, TimeUnit.MILLISECONDS); + Future futureChildGroup = this.childGroup.shutdownGracefully(SHUTDOWN_QUIET_PERIOD_MS, SHUTDOWN_TIMEOUT_MS, TimeUnit.MILLISECONDS); + this.childGroup = null; + Future futureGroup = this.group.shutdownGracefully(SHUTDOWN_QUIET_PERIOD_MS, SHUTDOWN_TIMEOUT_MS, TimeUnit.MILLISECONDS); this.group = null; - Future future2 = this.playerGroup.shutdownGracefully(SHUTDOWN_QUIET_PERIOD_MS, SHUTDOWN_TIMEOUT_MS, TimeUnit.MILLISECONDS); + Future futurePlayerGroup = this.playerGroup.shutdownGracefully(SHUTDOWN_QUIET_PERIOD_MS, SHUTDOWN_TIMEOUT_MS, TimeUnit.MILLISECONDS); this.playerGroup = null; - future1.sync(); - future2.sync(); + + futureChildGroup.sync(); + futureGroup.sync(); + futurePlayerGroup.sync(); SkinProvider.shutdown(); } catch (InterruptedException e) { GeyserImpl.getInstance().getLogger().severe("Exception in shutdown process", e); } - this.bootstrapFuture.channel().closeFuture().syncUninterruptibly(); + for (ChannelFuture f : bootstrapFutures) { + f.channel().closeFuture().syncUninterruptibly(); + } } - private ServerBootstrap createBootstrap(EventLoopGroup group) { + private ServerBootstrap createBootstrap() { if (this.geyser.getConfig().isDebugMode()) { this.geyser.getLogger().debug("EventLoop type: " + TRANSPORT.datagramChannel()); if (TRANSPORT.datagramChannel() == NioDatagramChannel.class) { @@ -188,7 +201,7 @@ public final class GeyserServer { this.geyser.getLogger().debug("Setting MTU to " + this.geyser.getConfig().getMtu()); return new ServerBootstrap() .channelFactory(RakChannelFactory.server(TRANSPORT.datagramChannel())) - .group(group) + .group(group, childGroup) .option(RakChannelOption.RAK_HANDLE_PING, true) .option(RakChannelOption.RAK_MAX_MTU, this.geyser.getConfig().getMtu()) .childHandler(serverInitializer); @@ -224,7 +237,7 @@ public final class GeyserServer { return true; } - public BedrockPong onQuery(InetSocketAddress inetSocketAddress) { + public BedrockPong onQuery(Channel channel, InetSocketAddress inetSocketAddress) { if (geyser.getConfig().isDebugMode() && PRINT_DEBUG_PINGS) { String ip; if (geyser.getConfig().isLogPlayerIpAddresses()) { @@ -257,7 +270,7 @@ public final class GeyserServer { .version(GameProtocol.DEFAULT_BEDROCK_CODEC.getMinecraftVersion()) // Required to not be empty as of 1.16.210.59. Can only contain . and numbers. .ipv4Port(this.broadcastPort) .ipv6Port(this.broadcastPort) - .serverId(bootstrapFuture.channel().config().getOption(RakChannelOption.RAK_GUID)); + .serverId(channel.config().getOption(RakChannelOption.RAK_GUID)); if (config.isPassthroughMotd() && pingInfo != null && pingInfo.getDescription() != null) { String[] motd = MessageTranslator.convertMessageLenient(pingInfo.getDescription()).split("\n"); diff --git a/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakPingHandler.java b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakPingHandler.java index e63bf9dd2..62b9c6d12 100644 --- a/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakPingHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/netty/handler/RakPingHandler.java @@ -45,7 +45,7 @@ public class RakPingHandler extends SimpleChannelInboundHandler { protected void channelRead0(ChannelHandlerContext ctx, RakPing msg) { long guid = ctx.channel().config().getOption(RakChannelOption.RAK_GUID); - RakPong pong = msg.reply(guid, this.server.onQuery(msg.getSender()).toByteBuf()); + RakPong pong = msg.reply(guid, this.server.onQuery(ctx.channel(), msg.getSender()).toByteBuf()); ctx.writeAndFlush(pong); } } From 19a3dc3c4b2f7aa22c9325c32acb22f69f8baaf0 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 6 Feb 2024 20:11:17 +0100 Subject: [PATCH 79/86] Support Bedrock 1.20.60 (#4415) * Start on 1.20.60 support * fix dimension switching * Fix custom item icons... thanks mojang * fix custom blocks/custom skulls breaking all block mappings * - replace 10000 with static final variable * fix: creative items not being found * versioned custom item registration * fix compression level setting * show 1.20.61 as supported --- .../geysermc/geyser/network/GameProtocol.java | 12 +- .../geyser/network/UpstreamPacketHandler.java | 12 +- .../populator/BlockRegistryPopulator.java | 5 + .../registry/populator/Conversion630_649.java | 40 + .../CreativeItemRegistryPopulator.java | 1 + .../CustomBlockRegistryPopulator.java | 34 +- .../CustomItemRegistryPopulator.java | 36 +- .../CustomSkullRegistryPopulator.java | 2 +- .../populator/ItemRegistryPopulator.java | 34 +- .../JavaLevelChunkWithLightTranslator.java | 2 + .../org/geysermc/geyser/util/ChunkUtils.java | 1 + .../bedrock/block_palette.1_20_60.nbt | Bin 0 -> 124510 bytes .../bedrock/creative_items.1_20_60.json | 5787 ++++++++++++++++ .../bedrock/runtime_item_states.1_20_60.json | 5998 +++++++++++++++++ gradle/libs.versions.toml | 6 +- 15 files changed, 11929 insertions(+), 41 deletions(-) create mode 100644 core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_649.java create mode 100644 core/src/main/resources/bedrock/block_palette.1_20_60.nbt create mode 100644 core/src/main/resources/bedrock/creative_items.1_20_60.json create mode 100644 core/src/main/resources/bedrock/runtime_item_states.1_20_60.json diff --git a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java index 42cce607b..a03a36ad2 100644 --- a/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java +++ b/core/src/main/java/org/geysermc/geyser/network/GameProtocol.java @@ -31,6 +31,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; import org.cloudburstmc.protocol.bedrock.codec.BedrockCodec; import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; +import org.cloudburstmc.protocol.bedrock.codec.v649.Bedrock_v649; import org.cloudburstmc.protocol.bedrock.netty.codec.packet.BedrockPacketCodec; import org.geysermc.geyser.session.GeyserSession; @@ -46,7 +47,7 @@ public final class GameProtocol { * Default Bedrock codec that should act as a fallback. Should represent the latest available * release of the game that Geyser supports. */ - public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v630.CODEC; + public static final BedrockCodec DEFAULT_BEDROCK_CODEC = Bedrock_v649.CODEC; /** * A list of all supported Bedrock versions that can join Geyser @@ -63,9 +64,12 @@ public final class GameProtocol { SUPPORTED_BEDROCK_CODECS.add(Bedrock_v622.CODEC.toBuilder() .minecraftVersion("1.20.40/1.20.41") .build()); - SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() + SUPPORTED_BEDROCK_CODECS.add(Bedrock_v630.CODEC.toBuilder() .minecraftVersion("1.20.50/1.20.51") .build()); + SUPPORTED_BEDROCK_CODECS.add(DEFAULT_BEDROCK_CODEC.toBuilder() + .minecraftVersion("1.20.60/1.20.61") + .build()); } /** @@ -88,6 +92,10 @@ public final class GameProtocol { return session.getUpstream().getProtocolVersion() < Bedrock_v630.CODEC.getProtocolVersion(); } + public static boolean is1_20_60orHigher(int protocolVersion) { + return protocolVersion >= Bedrock_v649.CODEC.getProtocolVersion(); + } + /** * Gets the {@link PacketCodec} for Minecraft: Java Edition. * diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index 7a22b8a42..df5eb36f7 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -33,6 +33,9 @@ import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.data.ExperimentData; import org.cloudburstmc.protocol.bedrock.data.PacketCompressionAlgorithm; import org.cloudburstmc.protocol.bedrock.data.ResourcePackType; +import org.cloudburstmc.protocol.bedrock.netty.codec.compression.CompressionStrategy; +import org.cloudburstmc.protocol.bedrock.netty.codec.compression.SimpleCompressionStrategy; +import org.cloudburstmc.protocol.bedrock.netty.codec.compression.ZlibCompression; import org.cloudburstmc.protocol.bedrock.packet.BedrockPacket; import org.cloudburstmc.protocol.bedrock.packet.LoginPacket; import org.cloudburstmc.protocol.bedrock.packet.ModalFormResponsePacket; @@ -48,6 +51,7 @@ import org.cloudburstmc.protocol.bedrock.packet.ResourcePackStackPacket; import org.cloudburstmc.protocol.bedrock.packet.ResourcePacksInfoPacket; import org.cloudburstmc.protocol.bedrock.packet.SetTitlePacket; import org.cloudburstmc.protocol.common.PacketSignal; +import org.cloudburstmc.protocol.common.util.Zlib; import org.geysermc.geyser.Constants; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.network.AuthType; @@ -77,11 +81,16 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { private boolean networkSettingsRequested = false; private final Deque packsToSent = new ArrayDeque<>(); + private final CompressionStrategy compressionStrategy; private SessionLoadResourcePacksEventImpl resourcePackLoadEvent; public UpstreamPacketHandler(GeyserImpl geyser, GeyserSession session) { super(geyser, session); + + ZlibCompression compression = new ZlibCompression(Zlib.RAW); + compression.setLevel(this.geyser.getConfig().getBedrock().getCompressionLevel()); + this.compressionStrategy = new SimpleCompressionStrategy(compression); } private PacketSignal translateAndDefault(BedrockPacket packet) { @@ -149,9 +158,8 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { responsePacket.setCompressionAlgorithm(algorithm); responsePacket.setCompressionThreshold(512); session.sendUpstreamPacketImmediately(responsePacket); + session.getUpstream().getSession().getPeer().setCompression(compressionStrategy); - session.getUpstream().getSession().setCompression(algorithm); - session.getUpstream().getSession().setCompressionLevel(this.geyser.getConfig().getBedrock().getCompressionLevel()); networkSettingsRequested = true; return PacketSignal.HANDLED; } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java index 415e61ac2..8aa16fe48 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/BlockRegistryPopulator.java @@ -41,6 +41,7 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; +import org.cloudburstmc.protocol.bedrock.codec.v649.Bedrock_v649; import org.cloudburstmc.protocol.bedrock.data.BlockPropertyData; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.geysermc.geyser.GeyserImpl; @@ -118,6 +119,8 @@ public final class BlockRegistryPopulator { var blockMappers = ImmutableMap., Remapper>builder() .put(ObjectIntPair.of("1_20_40", Bedrock_v622.CODEC.getProtocolVersion()), Conversion630_622::remapBlock) .put(ObjectIntPair.of("1_20_50", Bedrock_v630.CODEC.getProtocolVersion()), tag -> tag) + // Only changes in 1.20.60 are hard_stained_glass (an EDU only block) + .put(ObjectIntPair.of("1_20_60", Bedrock_v649.CODEC.getProtocolVersion()), tag -> tag) .build(); // We can keep this strong as nothing should be garbage collected @@ -139,6 +142,7 @@ public final class BlockRegistryPopulator { builder.remove("version"); // Remove all nbt tags which are not needed for differentiating states builder.remove("name_hash"); // Quick workaround - was added in 1.19.20 builder.remove("network_id"); // Added in 1.19.80 - ???? + builder.remove("block_id"); // Added in 1.20.60 //TODO verify this can be just removed //noinspection UnstableApiUsage builder.putCompound("states", statesInterner.intern((NbtMap) builder.remove("states"))); vanillaBlockStates.set(i, builder.build()); @@ -154,6 +158,7 @@ public final class BlockRegistryPopulator { List customExtBlockStates = new ArrayList<>(); int[] remappedVanillaIds = new int[0]; if (BlockRegistries.CUSTOM_BLOCKS.get().length != 0) { + CustomBlockRegistryPopulator.BLOCK_ID.set(CustomBlockRegistryPopulator.START_OFFSET); for (CustomBlockData customBlock : BlockRegistries.CUSTOM_BLOCKS.get()) { customBlockProperties.add(CustomBlockRegistryPopulator.generateBlockPropertyData(customBlock, protocolVersion)); CustomBlockRegistryPopulator.generateCustomBlockStates(customBlock, customBlockStates, customExtBlockStates); diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_649.java b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_649.java new file mode 100644 index 000000000..ed66322ff --- /dev/null +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/Conversion630_649.java @@ -0,0 +1,40 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.registry.populator; + +import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.registry.type.GeyserMappingItem; + + +public class Conversion630_649 { + + static GeyserMappingItem remapItem(@SuppressWarnings("unused") Item item, GeyserMappingItem mapping) { + if (mapping.getBedrockIdentifier().equalsIgnoreCase("minecraft:scute")) { + return mapping.withBedrockIdentifier("minecraft:turtle_scute"); + } + return mapping; + } +} diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java index d27a2ed49..c536d739c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CreativeItemRegistryPopulator.java @@ -124,6 +124,7 @@ public class CreativeItemRegistryPopulator { builder.remove("name_hash"); builder.remove("network_id"); builder.remove("version"); + builder.remove("block_id"); blockDefinition = blockMappings.getDefinition(builder.build()); } catch (IOException e) { diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java index 2a9948f45..ea33450bf 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomBlockRegistryPopulator.java @@ -28,12 +28,14 @@ import org.geysermc.geyser.level.block.GeyserCustomBlockData; import org.geysermc.geyser.level.block.GeyserCustomBlockState; import org.geysermc.geyser.level.block.GeyserGeometryComponent; import org.geysermc.geyser.level.block.GeyserMaterialInstance; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.CustomSkull; import org.geysermc.geyser.util.MathUtils; import java.util.ArrayList; +import java.util.concurrent.atomic.AtomicInteger; import java.util.HashMap; import java.util.HashSet; import java.util.List; @@ -41,6 +43,13 @@ import java.util.Map; import java.util.Set; public class CustomBlockRegistryPopulator { + + // Since 1.20.60, custom blocks need a block_id in their nbt tag + public static AtomicInteger BLOCK_ID = new AtomicInteger(); + + // Custom block id's start at 10000, and count up + public static final int START_OFFSET = 10000; + /** * The stage of population */ @@ -89,7 +98,7 @@ public class CustomBlockRegistryPopulator { GeyserImpl.getInstance().getEventBus().fire(new GeyserDefineCustomBlocksEvent() { @Override public void register(@NonNull CustomBlockData customBlockData) { - if (customBlockData.name().length() == 0) { + if (customBlockData.name().isEmpty()) { throw new IllegalArgumentException("Custom block name must have at least 1 character."); } if (!CUSTOM_BLOCK_NAMES.add(customBlockData.name())) { @@ -179,17 +188,17 @@ public class CustomBlockRegistryPopulator { }); BlockRegistries.CUSTOM_BLOCK_STATE_OVERRIDES.set(blockStateOverrides); - if (blockStateOverrides.size() != 0) { + if (!blockStateOverrides.isEmpty()) { GeyserImpl.getInstance().getLogger().info("Registered " + blockStateOverrides.size() + " custom block overrides."); } BlockRegistries.CUSTOM_BLOCK_ITEM_OVERRIDES.set(CUSTOM_BLOCK_ITEM_OVERRIDES); - if (CUSTOM_BLOCK_ITEM_OVERRIDES.size() != 0) { + if (!CUSTOM_BLOCK_ITEM_OVERRIDES.isEmpty()) { GeyserImpl.getInstance().getLogger().info("Registered " + CUSTOM_BLOCK_ITEM_OVERRIDES.size() + " custom block item overrides."); } BlockRegistries.EXTENDED_COLLISION_BOXES.set(extendedCollisionBoxes); - if (extendedCollisionBoxes.size() != 0) { + if (!extendedCollisionBoxes.isEmpty()) { GeyserImpl.getInstance().getLogger().info("Registered " + extendedCollisionBoxes.size() + " custom block extended collision boxes."); } } @@ -199,7 +208,7 @@ public class CustomBlockRegistryPopulator { */ private static void populateNonVanilla() { BlockRegistries.NON_VANILLA_BLOCK_STATE_OVERRIDES.set(NON_VANILLA_BLOCK_STATE_OVERRIDES); - if (NON_VANILLA_BLOCK_STATE_OVERRIDES.size() != 0) { + if (!NON_VANILLA_BLOCK_STATE_OVERRIDES.isEmpty()) { GeyserImpl.getInstance().getLogger().info("Registered " + NON_VANILLA_BLOCK_STATE_OVERRIDES.size() + " non-vanilla block overrides."); } } @@ -209,7 +218,7 @@ public class CustomBlockRegistryPopulator { */ private static void registration() { BlockRegistries.CUSTOM_BLOCKS.set(CUSTOM_BLOCKS.toArray(new CustomBlockData[0])); - if (CUSTOM_BLOCKS.size() != 0) { + if (!CUSTOM_BLOCKS.isEmpty()) { GeyserImpl.getInstance().getLogger().info("Registered " + CUSTOM_BLOCKS.size() + " custom blocks."); } } @@ -279,7 +288,7 @@ public class CustomBlockRegistryPopulator { CreativeCategory creativeCategory = customBlock.creativeCategory() != null ? customBlock.creativeCategory() : CreativeCategory.NONE; String creativeGroup = customBlock.creativeGroup() != null ? customBlock.creativeGroup() : ""; - NbtMap propertyTag = NbtMap.builder() + NbtMapBuilder propertyTag = NbtMap.builder() .putCompound("components", CustomBlockRegistryPopulator.convertComponents(customBlock.components(), protocolVersion)) // this is required or the client will crash // in the future, this can be used to replace items in the creative inventory @@ -292,9 +301,14 @@ public class CustomBlockRegistryPopulator { // meaning of this version is unknown, but it's required for tags to work and should probably be checked periodically .putInt("molangVersion", 1) .putList("permutations", NbtType.COMPOUND, permutations) - .putList("properties", NbtType.COMPOUND, properties) - .build(); - return new BlockPropertyData(customBlock.identifier(), propertyTag); + .putList("properties", NbtType.COMPOUND, properties); + + if (GameProtocol.is1_20_60orHigher(protocolVersion)) { + propertyTag.putCompound("vanilla_block_data", NbtMap.builder() + .putInt("block_id", BLOCK_ID.getAndIncrement()) + .build()); + } + return new BlockPropertyData(customBlock.identifier(), propertyTag.build()); } /** diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index 6be1aac4c..e1d67399f 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -44,6 +44,7 @@ import org.geysermc.geyser.item.GeyserCustomMappingData; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.components.WearableSlot; import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.registry.mappings.MappingsConfigReader; import org.geysermc.geyser.registry.type.GeyserMappingItem; import org.geysermc.geyser.registry.type.ItemMapping; @@ -97,10 +98,10 @@ public class CustomItemRegistryPopulator { } } - public static GeyserCustomMappingData registerCustomItem(String customItemName, Item javaItem, GeyserMappingItem mapping, CustomItemData customItemData, int bedrockId) { + public static GeyserCustomMappingData registerCustomItem(String customItemName, Item javaItem, GeyserMappingItem mapping, CustomItemData customItemData, int bedrockId, int protocolVersion) { ItemDefinition itemDefinition = new SimpleItemDefinition(customItemName, bedrockId, true); - NbtMapBuilder builder = createComponentNbt(customItemData, javaItem, mapping, customItemName, bedrockId); + NbtMapBuilder builder = createComponentNbt(customItemData, javaItem, mapping, customItemName, bedrockId, protocolVersion); ComponentItemData componentItemData = new ComponentItemData(customItemName, builder.build()); return new GeyserCustomMappingData(componentItemData, itemDefinition, customItemName, bedrockId); @@ -124,7 +125,7 @@ public class CustomItemRegistryPopulator { return true; } - public static NonVanillaItemRegistration registerCustomItem(NonVanillaCustomItemData customItemData, int customItemId) { + public static NonVanillaItemRegistration registerCustomItem(NonVanillaCustomItemData customItemData, int customItemId, int protocolVersion) { String customIdentifier = customItemData.identifier(); Set repairMaterials = customItemData.repairMaterials(); @@ -152,14 +153,14 @@ public class CustomItemRegistryPopulator { .build(); NbtMapBuilder builder = createComponentNbt(customItemData, customItemData.identifier(), customItemId, - customItemData.creativeCategory(), customItemData.creativeGroup(), customItemData.isHat(), customItemData.displayHandheld()); + customItemData.creativeCategory(), customItemData.creativeGroup(), customItemData.isHat(), customItemData.displayHandheld(), protocolVersion); ComponentItemData componentItemData = new ComponentItemData(customIdentifier, builder.build()); return new NonVanillaItemRegistration(componentItemData, item, customItemMapping); } private static NbtMapBuilder createComponentNbt(CustomItemData customItemData, Item javaItem, GeyserMappingItem mapping, - String customItemName, int customItemId) { + String customItemName, int customItemId, int protocolVersion) { NbtMapBuilder builder = NbtMap.builder(); builder.putString("name", customItemName) .putInt("id", customItemId); @@ -167,7 +168,7 @@ public class CustomItemRegistryPopulator { NbtMapBuilder itemProperties = NbtMap.builder(); NbtMapBuilder componentBuilder = NbtMap.builder(); - setupBasicItemInfo(javaItem.maxDamage(), javaItem.maxStackSize(), mapping.getToolType() != null || customItemData.displayHandheld(), customItemData, itemProperties, componentBuilder); + setupBasicItemInfo(javaItem.maxDamage(), javaItem.maxStackSize(), mapping.getToolType() != null || customItemData.displayHandheld(), customItemData, itemProperties, componentBuilder, protocolVersion); boolean canDestroyInCreative = true; if (mapping.getToolType() != null) { // This is not using the isTool boolean because it is not just a render type here. @@ -210,7 +211,7 @@ public class CustomItemRegistryPopulator { @SuppressWarnings("OptionalUsedAsFieldOrParameterType") private static NbtMapBuilder createComponentNbt(NonVanillaCustomItemData customItemData, String customItemName, int customItemId, OptionalInt creativeCategory, - String creativeGroup, boolean isHat, boolean displayHandheld) { + String creativeGroup, boolean isHat, boolean displayHandheld, int protocolVersion) { NbtMapBuilder builder = NbtMap.builder(); builder.putString("name", customItemName) .putInt("id", customItemId); @@ -218,7 +219,7 @@ public class CustomItemRegistryPopulator { NbtMapBuilder itemProperties = NbtMap.builder(); NbtMapBuilder componentBuilder = NbtMap.builder(); - setupBasicItemInfo(customItemData.maxDamage(), customItemData.stackSize(), displayHandheld, customItemData, itemProperties, componentBuilder); + setupBasicItemInfo(customItemData.maxDamage(), customItemData.stackSize(), displayHandheld, customItemData, itemProperties, componentBuilder, protocolVersion); boolean canDestroyInCreative = true; if (customItemData.toolType() != null) { // This is not using the isTool boolean because it is not just a render type here. @@ -258,10 +259,21 @@ public class CustomItemRegistryPopulator { return builder; } - private static void setupBasicItemInfo(int maxDamage, int stackSize, boolean displayHandheld, CustomItemData customItemData, NbtMapBuilder itemProperties, NbtMapBuilder componentBuilder) { - itemProperties.putCompound("minecraft:icon", NbtMap.builder() - .putString("texture", customItemData.icon()) - .build()); + private static void setupBasicItemInfo(int maxDamage, int stackSize, boolean displayHandheld, CustomItemData customItemData, NbtMapBuilder itemProperties, NbtMapBuilder componentBuilder, int protocolVersion) { + NbtMap iconMap; + if (GameProtocol.is1_20_60orHigher(protocolVersion)) { + iconMap = NbtMap.builder() + .putCompound("textures", NbtMap.builder() + .putString("default", customItemData.icon()) + .build()) + .build(); + } else { + iconMap = NbtMap.builder() + .putString("texture", customItemData.icon()) + .build(); + } + itemProperties.putCompound("minecraft:icon", iconMap); + componentBuilder.putCompound("minecraft:display_name", NbtMap.builder().putString("value", customItemData.displayName()).build()); // Add a Geyser tag to the item, allowing Molang queries diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java index 02d9a75ec..ec7243396 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomSkullRegistryPopulator.java @@ -130,7 +130,7 @@ public class CustomSkullRegistryPopulator { } }); - if (BlockRegistries.CUSTOM_SKULLS.get().size() != 0) { + if (!BlockRegistries.CUSTOM_SKULLS.get().isEmpty()) { GeyserImpl.getInstance().getLogger().info("Registered " + BlockRegistries.CUSTOM_SKULLS.get().size() + " custom skulls as custom blocks."); } } diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java index bc2cf4a43..539452169 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/ItemRegistryPopulator.java @@ -40,6 +40,7 @@ import org.cloudburstmc.nbt.NbtMapBuilder; import org.cloudburstmc.nbt.NbtType; import org.cloudburstmc.protocol.bedrock.codec.v622.Bedrock_v622; import org.cloudburstmc.protocol.bedrock.codec.v630.Bedrock_v630; +import org.cloudburstmc.protocol.bedrock.codec.v649.Bedrock_v649; import org.cloudburstmc.protocol.bedrock.data.SoundEvent; import org.cloudburstmc.protocol.bedrock.data.definitions.BlockDefinition; import org.cloudburstmc.protocol.bedrock.data.definitions.ItemDefinition; @@ -59,6 +60,7 @@ import org.geysermc.geyser.inventory.item.StoredItemMappings; import org.geysermc.geyser.item.GeyserCustomMappingData; import org.geysermc.geyser.item.Items; import org.geysermc.geyser.item.type.Item; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.registry.BlockRegistries; import org.geysermc.geyser.registry.Registries; import org.geysermc.geyser.registry.type.*; @@ -89,6 +91,7 @@ public class ItemRegistryPopulator { List paletteVersions = new ArrayList<>(3); paletteVersions.add(new PaletteVersion("1_20_40", Bedrock_v622.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion630_622::remapItem)); paletteVersions.add(new PaletteVersion("1_20_50", Bedrock_v630.CODEC.getProtocolVersion())); + paletteVersions.add(new PaletteVersion("1_20_60", Bedrock_v649.CODEC.getProtocolVersion(), Collections.emptyMap(), Conversion630_649::remapItem)); GeyserBootstrap bootstrap = GeyserImpl.getInstance().getBootstrap(); @@ -272,7 +275,7 @@ public class ItemRegistryPopulator { if (firstPass) { firstPass = false; - if (states.size() == 0) { + if (states.isEmpty()) { // No need to iterate and find all block states - this is the one, as there can't be any others bedrockBlock = bedrockBlockRuntimeId; break; @@ -288,7 +291,7 @@ public class ItemRegistryPopulator { requiredBlockStatesBuilder.remove(nbtEntry.getKey()); } } - if (requiredBlockStatesBuilder.size() == 0) { + if (requiredBlockStatesBuilder.isEmpty()) { // There are no required block states // E.G. there was only a direction property that is no longer in play // (States that are important include color for glass) @@ -420,7 +423,7 @@ public class ItemRegistryPopulator { } GeyserCustomMappingData customMapping = CustomItemRegistryPopulator.registerCustomItem( - customItemName, javaItem, mappingItem, customItem, customProtocolId + customItemName, javaItem, mappingItem, customItem, customProtocolId, palette.protocolVersion ); // ComponentItemData - used to register some custom properties componentItemData.add(customMapping.componentItemData()); @@ -495,7 +498,7 @@ public class ItemRegistryPopulator { .count(1) .build()); - registerFurnaceMinecart(nextFreeBedrockId++, componentItemData); + registerFurnaceMinecart(nextFreeBedrockId++, componentItemData, palette.protocolVersion); // Register any completely custom items given to us IntSet registeredJavaIds = new IntOpenHashSet(); // Used to check for duplicate item java ids @@ -508,7 +511,7 @@ public class ItemRegistryPopulator { } int customItemId = nextFreeBedrockId++; - NonVanillaItemRegistration registration = CustomItemRegistryPopulator.registerCustomItem(customItem, customItemId); + NonVanillaItemRegistration registration = CustomItemRegistryPopulator.registerCustomItem(customItem, customItemId, palette.protocolVersion); componentItemData.add(registration.componentItemData()); ItemMapping mapping = registration.mapping(); @@ -585,7 +588,7 @@ public class ItemRegistryPopulator { } } - private static void registerFurnaceMinecart(int nextFreeBedrockId, List componentItemData) { + private static void registerFurnaceMinecart(int nextFreeBedrockId, List componentItemData, int protocolVersion) { NbtMapBuilder builder = NbtMap.builder(); builder.putString("name", "geysermc:furnace_minecart") .putInt("id", nextFreeBedrockId); @@ -594,11 +597,20 @@ public class ItemRegistryPopulator { NbtMapBuilder componentBuilder = NbtMap.builder(); // Conveniently, as of 1.16.200, the furnace minecart has a texture AND translation string already. - itemProperties.putCompound("minecraft:icon", NbtMap.builder() - .putString("texture", "minecart_furnace") - .putString("frame", "0.000000") - .putInt("frame_version", 1) - .putString("legacy_id", "").build()); + // Not so conveniently, the way to set an icon changed in 1.20.60 + NbtMap iconMap; + if (GameProtocol.is1_20_60orHigher(protocolVersion)) { + iconMap = NbtMap.builder() + .putCompound("textures", NbtMap.builder() + .putString("default", "minecart_furnace") + .build()) + .build(); + } else { + iconMap = NbtMap.builder() + .putString("texture", "minecart_furnace") + .build(); + } + itemProperties.putCompound("minecraft:icon", iconMap); componentBuilder.putCompound("minecraft:display_name", NbtMap.builder().putString("value", "item.minecartFurnace.name").build()); // Indicate that the arm animation should play on rails diff --git a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java index 19c587bf8..8a35bbb5c 100644 --- a/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java +++ b/core/src/main/java/org/geysermc/geyser/translator/protocol/java/level/JavaLevelChunkWithLightTranslator.java @@ -72,6 +72,7 @@ import org.geysermc.geyser.translator.protocol.PacketTranslator; import org.geysermc.geyser.translator.protocol.Translator; import org.geysermc.geyser.util.BlockEntityUtils; import org.geysermc.geyser.util.ChunkUtils; +import org.geysermc.geyser.util.DimensionUtils; import java.io.IOException; import java.util.BitSet; @@ -522,6 +523,7 @@ public class JavaLevelChunkWithLightTranslator extends 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 S3Ddm$_?t%ZPkIIGv;P4hJo(K4 literal 0 HcmV?d00001 diff --git a/core/src/main/resources/bedrock/creative_items.1_20_60.json b/core/src/main/resources/bedrock/creative_items.1_20_60.json new file mode 100644 index 000000000..d4063030e --- /dev/null +++ b/core/src/main/resources/bedrock/creative_items.1_20_60.json @@ -0,0 +1,5787 @@ +{ + "items": [ + { + "id": "minecraft:oak_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19wbGFua3MECQBuYW1lX2hhc2ilMDLR92rQ4wMKAG5ldHdvcmtfaWS2MwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:spruce_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAwAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9wbGFua3MECQBuYW1lX2hhc2iumBkmFGFE8gMKAG5ldHdvcmtfaWQZNQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:birch_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3BsYW5rcwQJAG5hbWVfaGFzaLrrAKJqV2WFAwoAbmV0d29ya19pZJQjAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:jungle_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAwAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9wbGFua3MECQBuYW1lX2hhc2iBM3k4T3FAugMKAG5ldHdvcmtfaWQwLgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:acacia_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAwAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9wbGFua3MECQBuYW1lX2hhc2g60edJxO5/aAMKAG5ldHdvcmtfaWSDHAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:dark_oak_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3BsYW5rcwQJAG5hbWVfaGFzaAr64wkQ9cA7AwoAbmV0d29ya19pZDMXAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:mangrove_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3BsYW5rcwQJAG5hbWVfaGFzaPvLtcEA0F8xAwoAbmV0d29ya19pZGgJAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cherry_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9wbGFua3MECQBuYW1lX2hhc2hNIvVh/lVW7gMKAG5ldHdvcmtfaWSVNAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:bamboo_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19wbGFua3MECQBuYW1lX2hhc2gYnjNz7SCCjgMKAG5ldHdvcmtfaWTbJAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:bamboo_mosaic", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT8AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWMECQBuYW1lX2hhc2izSEgiMKOp/AMKAG5ldHdvcmtfaWT0NgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:crimson_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fcGxhbmtzBAkAbmFtZV9oYXNoJc5IKqNXJnwDCgBuZXR3b3JrX2lkmyEAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:warped_planks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTyAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9wbGFua3MECQBuYW1lX2hhc2g3yGXEWhe6LgMKAG5ldHdvcmtfaWRLCQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRFCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBjb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRGCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9jb2JibGVzdG9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRHCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBncmFuaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRICgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBwBkaW9yaXRlCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRJCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCABhbmRlc2l0ZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRKCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBzYW5kc3RvbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRRCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDQByZWRfc2FuZHN0b25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRMCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCwBzdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRNCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEQBtb3NzeV9zdG9uZV9icmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRLCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlBQBicmljawgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWROCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlDABuZXRoZXJfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRSCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlEAByZWRfbmV0aGVyX2JyaWNrCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRPCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCQBlbmRfYnJpY2sIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cobblestone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAAAACAQAbmFtZRoAbWluZWNyYWZ0OmNvYmJsZXN0b25lX3dhbGwECQBuYW1lX2hhc2hZu/xE7lYtNgMKAG5ldHdvcmtfaWRQCgAACgYAc3RhdGVzCA8Ad2FsbF9ibG9ja190eXBlCgBwcmlzbWFyaW5lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:blackstone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaMP8XppUSU1RAwoAbmV0d29ya19pZDsaAAAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_blackstone_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfd2FsbAQJAG5hbWVfaGFzaP6SwV08YwzAAwoAbmV0d29ya19pZJsuAAAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_blackstone_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfd2FsbAQJAG5hbWVfaGFzaBBIDZbHxiEzAwoAbmV0d29ya19pZHYJAAAKBgBzdGF0ZXMIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9lYXN0BABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfbm9ydGgEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9zb3V0aAQAbm9uZQgZAHdhbGxfY29ubmVjdGlvbl90eXBlX3dlc3QEAG5vbmUBDQB3YWxsX3Bvc3RfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cobbled_deepslate_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3dhbGwECQBuYW1lX2hhc2iECY5oKxeT+gMKAG5ldHdvcmtfaWQwNgAACgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:deepslate_tile_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3dhbGwECQBuYW1lX2hhc2jz7N+PeuEXgQMKAG5ldHdvcmtfaWSNIgAACgYAc3RhdGVzCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfZWFzdAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX25vcnRoBABub25lCBoAd2FsbF9jb25uZWN0aW9uX3R5cGVfc291dGgEAG5vbmUIGQB3YWxsX2Nvbm5lY3Rpb25fdHlwZV93ZXN0BABub25lAQ0Ad2FsbF9wb3N0X2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:polished_deepslate_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV93YWxsBAkAbmFtZV9oYXNoHxjTdj9pevMDCgBuZXR3b3JrX2lkKDUAAAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:deepslate_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja193YWxsBAkAbmFtZV9oYXNoEs3EQrjroyEDCgBuZXR3b3JrX2lkoQQAAAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:mud_brick_wall", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja193YWxsBAkAbmFtZV9oYXNov9b98ATpUSwDCgBuZXR3b3JrX2lkfQgAAAoGAHN0YXRlcwgZAHdhbGxfY29ubmVjdGlvbl90eXBlX2Vhc3QEAG5vbmUIGgB3YWxsX2Nvbm5lY3Rpb25fdHlwZV9ub3J0aAQAbm9uZQgaAHdhbGxfY29ubmVjdGlvbl90eXBlX3NvdXRoBABub25lCBkAd2FsbF9jb25uZWN0aW9uX3R5cGVfd2VzdAQAbm9uZQENAHdhbGxfcG9zdF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:oak_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAAAACAQAbmFtZRMAbWluZWNyYWZ0Om9ha19mZW5jZQQJAG5hbWVfaGFzaGEmid7AaCWRAwoAbmV0d29ya19pZF0lAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:spruce_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAwAACAQAbmFtZRYAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZQQJAG5hbWVfaGFzaPQCm+aX1ZQeAwoAbmV0d29ya19pZHcEAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:birch_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AwAACAQAbmFtZRUAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlBAkAbmFtZV9oYXNo6CJ2ATpANfgDCgBuZXR3b3JrX2lkIzYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:jungle_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAwAACAQAbmFtZRYAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZQQJAG5hbWVfaGFzaOX4cD9uAmsdAwoAbmV0d29ya19pZHAEAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:acacia_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AwAACAQAbmFtZRYAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZQQJAG5hbWVfaGFzaGjn+RlKVDH6AwoAbmV0d29ya19pZC42AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:dark_oak_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAwAACAQAbmFtZRgAbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlBAkAbmFtZV9oYXNoGPj0gCgM0c0DCgBuZXR3b3JrX2lkNTAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:mangrove_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlBAkAbmFtZV9oYXNowwAd7tPu9bsDCgBuZXR3b3JrX2lkQi4AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cherry_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAwAACAQAbmFtZRYAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZQQJAG5hbWVfaGFzaFmtUfHfTxcxAwoAbmV0d29ya19pZGcJAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:bamboo_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19mZW5jZQQJAG5hbWVfaGFzaCKRbxfXsfkiAwoAbmV0d29ya19pZF0FAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:nether_brick_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAAAACAQAbmFtZRwAbWluZWNyYWZ0Om5ldGhlcl9icmlja19mZW5jZQQJAG5hbWVfaGFzaA6030ngawxcAwoAbmV0d29ya19pZLUbAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:crimson_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2UECQBuYW1lX2hhc2jhUhKv1HGj9AMKAG5ldHdvcmtfaWTcNQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:warped_fence", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAgAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9mZW5jZQQJAG5hbWVfaGFzaJfb3/YuKmOWAwoAbmV0d29ya19pZG0nAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAAAACAQAbmFtZRQAbWluZWNyYWZ0OmZlbmNlX2dhdGUECQBuYW1lX2hhc2hTxpjEDmRzAwMKAG5ldHdvcmtfaWRVAAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:spruce_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AAAACAQAbmFtZRsAbWluZWNyYWZ0OnNwcnVjZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoanTVB84HRbkDCgBuZXR3b3JrX2lkEC4AAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:birch_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmJpcmNoX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2jmfPklI8azSwMKAG5ldHdvcmtfaWQkGAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:jungle_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS5AAAACAQAbmFtZRsAbWluZWNyYWZ0Omp1bmdsZV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNobYVQkfBomIcDCgBuZXR3b3JrX2lkuCMAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:acacia_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS7AAAACAQAbmFtZRsAbWluZWNyYWZ0OmFjYWNpYV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoZnrLUx/XSekDCgBuZXR3b3JrX2lk5jMAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:dark_oak_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS6AAAACAQAbmFtZR0AbWluZWNyYWZ0OmRhcmtfb2FrX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2j2PTvdJJHcVQMKAG5ldHdvcmtfaWQxGwAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:mangrove_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1hbmdyb3ZlX2ZlbmNlX2dhdGUECQBuYW1lX2hhc2i/kOhBKiI/dAMKAG5ldHdvcmtfaWReHQAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAELAGluX3dhbGxfYml0AAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cherry_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAwAACAQAbmFtZRsAbWluZWNyYWZ0OmNoZXJyeV9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoKWLgCk0z+PsDCgBuZXR3b3JrX2lk3TYAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:bamboo_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJhbWJvb19mZW5jZV9nYXRlBAkAbmFtZV9oYXNopH1JrUgwdIADCgBuZXR3b3JrX2lkdCIAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:crimson_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNyaW1zb25fZmVuY2VfZ2F0ZQQJAG5hbWVfaGFzaHE3Gfd0Z2d2AwoAbmV0d29ya19pZCIfAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQsAaW5fd2FsbF9iaXQAAQgAb3Blbl9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:warped_fence_gate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAgAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF9mZW5jZV9nYXRlBAkAbmFtZV9oYXNoy0oIBjDIG4kDCgBuZXR3b3JrX2lk3iMAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCwBpbl93YWxsX2JpdAABCABvcGVuX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:normal_stone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAQAACAQAbmFtZR0AbWluZWNyYWZ0Om5vcm1hbF9zdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hAEktZZOkGIwMKAG5ldHdvcmtfaWReBQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX3N0YWlycwQJAG5hbWVfaGFzaNRjqVC5GRVDAwoAbmV0d29ya19pZNQXAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:mossy_cobblestone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSyAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lX3N0YWlycwQJAG5hbWVfaGFzaMVSTq5z9n1RAwoAbmV0d29ya19pZN0aAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:oak_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AAAACAQAbmFtZRQAbWluZWNyYWZ0Om9ha19zdGFpcnMECQBuYW1lX2hhc2jk/HFzdXy0FQMKAG5ldHdvcmtfaWTSAgAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:spruce_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAAAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9zdGFpcnMECQBuYW1lX2hhc2iznygw7uBPBQMKAG5ldHdvcmtfaWSMAAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:birch_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX3N0YWlycwQJAG5hbWVfaGFzaPfhbL619a3GAwoAbmV0d29ya19pZL8vAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:jungle_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAAAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9zdGFpcnMECQBuYW1lX2hhc2jodJsHUbOVxQMKAG5ldHdvcmtfaWSYLwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:acacia_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAAAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9zdGFpcnMECQBuYW1lX2hhc2h3x1NmD43IqQMKAG5ldHdvcmtfaWRULAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:dark_oak_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAAAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX3N0YWlycwQJAG5hbWVfaGFzaMfwkbYPbNmAAwoAbmV0d29ya19pZIUiAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:mangrove_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX3N0YWlycwQJAG5hbWVfaGFzaNpUDY+uGMpyAwoAbmV0d29ya19pZDQdAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cherry_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9zdGFpcnMECQBuYW1lX2hhc2jMtr0v9JY4zwMKAG5ldHdvcmtfaWRkMAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:bamboo_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT/AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19zdGFpcnMECQBuYW1lX2hhc2jFOzWL8PalKwMKAG5ldHdvcmtfaWRvCAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:bamboo_mosaic_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc3RhaXJzBAkAbmFtZV9oYXNoNLPiveSHPaoDCgBuZXR3b3JrX2lkXCwAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAAAACAQAbmFtZRwAbWluZWNyYWZ0OnN0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaN6tQViRo5cwAwoAbmV0d29ya19pZFcJAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:mossy_stone_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAQAACAQAbmFtZSIAbWluZWNyYWZ0Om1vc3N5X3N0b25lX2JyaWNrX3N0YWlycwQJAG5hbWVfaGFzaIB/Zv5YBPuYAwoAbmV0d29ya19pZCwpAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:sandstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAAAACAQAbmFtZRoAbWluZWNyYWZ0OnNhbmRzdG9uZV9zdGFpcnMECQBuYW1lX2hhc2hOyA0BoYUOPQMKAG5ldHdvcmtfaWRUFwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:smooth_sandstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSwAQAACAQAbmFtZSEAbWluZWNyYWZ0OnNtb290aF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoB+CuCd8Ruz8DCgBuZXR3b3JrX2lkghcAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_sandstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS0AAAACAQAbmFtZR4AbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNoPs0LpHPL24YDCgBuZXR3b3JrX2lkqSMAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:smooth_red_sandstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAQAACAQAbmFtZSUAbWluZWNyYWZ0OnNtb290aF9yZWRfc2FuZHN0b25lX3N0YWlycwQJAG5hbWVfaGFzaBvjtQv5pf+MAwoAbmV0d29ya19pZJIkAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:granite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAQAACAQAbmFtZRgAbWluZWNyYWZ0OmdyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNoGzpvtoqKQjgDCgBuZXR3b3JrX2lkjxUAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_granite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGVfc3RhaXJzBAkAbmFtZV9oYXNo3PvbSfEQklIDCgBuZXR3b3JrX2lkGRsAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:diorite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAQAACAQAbmFtZRgAbWluZWNyYWZ0OmRpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoi73T8VQuZmcDCgBuZXR3b3JrX2lkShwAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_diorite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAQAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGVfc3RhaXJzBAkAbmFtZV9oYXNoFKRJd5Wk5L0DCgBuZXR3b3JrX2lkii4AAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:andesite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaO5w2FKBw76EAwoAbmV0d29ya19pZIwjAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:polished_andesite_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAQAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlX3N0YWlycwQJAG5hbWVfaGFzaNcZZ/zmLInIAwoAbmV0d29ya19pZNsvAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAAAACAQAbmFtZRYAbWluZWNyYWZ0OmJyaWNrX3N0YWlycwQJAG5hbWVfaGFzaMyt+cRDk5O2AwoAbmV0d29ya19pZMgtAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:nether_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAAAACAQAbmFtZR0AbWluZWNyYWZ0Om5ldGhlcl9icmlja19zdGFpcnMECQBuYW1lX2hhc2jRqIoOXgifBAMKAG5ldHdvcmtfaWRzAAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_nether_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS3AQAACAQAbmFtZSEAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNogQvosSbcj7kDCgBuZXR3b3JrX2lkIi4AAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:end_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSxAQAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2hmlAk+QhsUsQMKAG5ldHdvcmtfaWQKLQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:quartz_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAAAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9zdGFpcnMECQBuYW1lX2hhc2hmvpvOqGi6egMKAG5ldHdvcmtfaWTEHwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:smooth_quartz_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS4AQAACAQAbmFtZR4AbWluZWNyYWZ0OnNtb290aF9xdWFydHpfc3RhaXJzBAkAbmFtZV9oYXNoNZZ9rX0qZOsDCgBuZXR3b3JrX2lkWDQAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:purpur_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAAAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnB1cl9zdGFpcnMECQBuYW1lX2hhc2ifwDxeezXD7gMKAG5ldHdvcmtfaWSZNAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:prismarine_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAQAACAQAbmFtZRsAbWluZWNyYWZ0OnByaXNtYXJpbmVfc3RhaXJzBAkAbmFtZV9oYXNooTHSZ+IrYtcDCgBuZXR3b3JrX2lkkTIAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:dark_prismarine_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAQAACAQAbmFtZSAAbWluZWNyYWZ0OmRhcmtfcHJpc21hcmluZV9zdGFpcnMECQBuYW1lX2hhc2hIciLmam4o4AMKAG5ldHdvcmtfaWRBMwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:prismarine_bricks_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAQAACAQAbmFtZSIAbWluZWNyYWZ0OnByaXNtYXJpbmVfYnJpY2tzX3N0YWlycwQJAG5hbWVfaGFzaNIjq1oBlZMMAwoAbmV0d29ya19pZHECAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:crimson_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT9AQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fc3RhaXJzBAkAbmFtZV9oYXNoZJqIzCBpCq4DCgBuZXR3b3JrX2lknywAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:warped_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9zdGFpcnMECQBuYW1lX2hhc2hOkY27jLD4RQMKAG5ldHdvcmtfaWThFwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:blackstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAgAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNokdoUb76p9McDCgBuZXR3b3JrX2lk0C8AAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_blackstone_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc3RhaXJzBAkAbmFtZV9oYXNolCFtFIE8MmADCgBuZXR3b3JrX2lk3hsAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_blackstone_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAgAACAQAbmFtZSoAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc3RhaXJzBAkAbmFtZV9oYXNonks6UlfpOmkDCgBuZXR3b3JrX2lkphwAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAgAACAQAbmFtZRsAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoHfoAXYq5G3MDCgBuZXR3b3JrX2lkPR0AAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:exposed_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAgAACAQAbmFtZSMAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2howneQGtZ9cgMKAG5ldHdvcmtfaWQsHQAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:weathered_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAgAACAQAbmFtZSUAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaP+R5loXxrVgAwoAbmV0d29ya19pZOYbAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:oxidized_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAgAACAQAbmFtZSQAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNo6Jeoq5rsPxsDCgBuZXR3b3JrX2lkSgQAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:waxed_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAgAACAQAbmFtZSEAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoh07CQj0/SR8DCgBuZXR3b3JrX2lkegQAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zdGFpcnMECQBuYW1lX2hhc2guVct1ilmxTwMKAG5ldHdvcmtfaWQeGgAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAgAACAQAbmFtZSsAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3N0YWlycwQJAG5hbWVfaGFzaPXC8Sz/phCpAwoAbmV0d29ya19pZEMsAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS/AgAACAQAbmFtZSoAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc3RhaXJzBAkAbmFtZV9oYXNoaqGdkuhxVZUDCgBuZXR3b3JrX2lkQCcAAAoGAHN0YXRlcwEPAHVwc2lkZV9kb3duX2JpdAADEAB3ZWlyZG9fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cobbled_deepslate_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AgAACAQAbmFtZSIAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3N0YWlycwQJAG5hbWVfaGFzaPIfa+TpyJcIAwoAbmV0d29ya19pZDUCAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:deepslate_tile_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3N0YWlycwQJAG5hbWVfaGFzaGFRFzB72mN2AwoAbmV0d29ya19pZBofAAAKBgBzdGF0ZXMBDwB1cHNpZGVfZG93bl9iaXQAAxAAd2VpcmRvX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:polished_deepslate_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAgAACAQAbmFtZSMAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zdGFpcnMECQBuYW1lX2hhc2iNCYxVik9sGAMKAG5ldHdvcmtfaWQNBAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:deepslate_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zdGFpcnMECQBuYW1lX2hhc2hIasOahEf83wMKAG5ldHdvcmtfaWQ5MwAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:mud_brick_stairs", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAgAACAQAbmFtZRoAbWluZWNyYWZ0Om11ZF9icmlja19zdGFpcnMECQBuYW1lX2hhc2gt3qxK1NWajAMKAG5ldHdvcmtfaWR6JAAACgYAc3RhdGVzAQ8AdXBzaWRlX2Rvd25fYml0AAMQAHdlaXJkb19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:wooden_door" + }, + { + "id": "minecraft:spruce_door" + }, + { + "id": "minecraft:birch_door" + }, + { + "id": "minecraft:jungle_door" + }, + { + "id": "minecraft:acacia_door" + }, + { + "id": "minecraft:dark_oak_door" + }, + { + "id": "minecraft:mangrove_door" + }, + { + "id": "minecraft:cherry_door" + }, + { + "id": "minecraft:bamboo_door" + }, + { + "id": "minecraft:iron_door" + }, + { + "id": "minecraft:crimson_door" + }, + { + "id": "minecraft:warped_door" + }, + { + "id": "minecraft:trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAAAACAQAbmFtZRIAbWluZWNyYWZ0OnRyYXBkb29yBAkAbmFtZV9oYXNotYiAJGtN0xADCgBuZXR3b3JrX2lkkQIAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:spruce_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAQAACAQAbmFtZRkAbWluZWNyYWZ0OnNwcnVjZV90cmFwZG9vcgQJAG5hbWVfaGFzaOwlfbgBkUW4AwoAbmV0d29ya19pZO8tAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:birch_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAQAACAQAbmFtZRgAbWluZWNyYWZ0OmJpcmNoX3RyYXBkb29yBAkAbmFtZV9oYXNoSLtLweOLJ7wDCgBuZXR3b3JrX2lkVC4AAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:jungle_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAQAACAQAbmFtZRkAbWluZWNyYWZ0Omp1bmdsZV90cmFwZG9vcgQJAG5hbWVfaGFzaDP/TnM9wyCIAwoAbmV0d29ya19pZMsjAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:acacia_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAQAACAQAbmFtZRkAbWluZWNyYWZ0OmFjYWNpYV90cmFwZG9vcgQJAG5hbWVfaGFzaMj8xi3vmEKOAwoAbmV0d29ya19pZLskAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:dark_oak_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAQAACAQAbmFtZRsAbWluZWNyYWZ0OmRhcmtfb2FrX3RyYXBkb29yBAkAbmFtZV9oYXNomB2GGJQ2aOMDCgBuZXR3b3JrX2lkizMAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:mangrove_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAgAACAQAbmFtZRsAbWluZWNyYWZ0Om1hbmdyb3ZlX3RyYXBkb29yBAkAbmFtZV9oYXNooV3kQsQUUmkDCgBuZXR3b3JrX2lkrhwAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAABCABvcGVuX2JpdAABDwB1cHNpZGVfZG93bl9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cherry_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAwAACAQAbmFtZRkAbWluZWNyYWZ0OmNoZXJyeV90cmFwZG9vcgQJAG5hbWVfaGFzaH/PefpfdHgtAwoAbmV0d29ya19pZDEJAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:bamboo_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJhbWJvb190cmFwZG9vcgQJAG5hbWVfaGFzaJrEOpsTwtKCAwoAbmV0d29ya19pZE4jAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:iron_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAAAACAQAbmFtZRcAbWluZWNyYWZ0Omlyb25fdHJhcGRvb3IECQBuYW1lX2hhc2gwA+IumsEiGQMKAG5ldHdvcmtfaWQqBAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:crimson_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT1AQAACAQAbmFtZRoAbWluZWNyYWZ0OmNyaW1zb25fdHJhcGRvb3IECQBuYW1lX2hhc2jHXufTnwUkYgMKAG5ldHdvcmtfaWQHHAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAEPAHVwc2lkZV9kb3duX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:warped_trapdoor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT2AQAACAQAbmFtZRkAbWluZWNyYWZ0OndhcnBlZF90cmFwZG9vcgQJAG5hbWVfaGFzaA20wG/+vkd6AwoAbmV0d29ya19pZJIfAAAKBgBzdGF0ZXMDCQBkaXJlY3Rpb24AAAAAAQgAb3Blbl9iaXQAAQ8AdXBzaWRlX2Rvd25fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:iron_bars", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAAAACAQAbmFtZRMAbWluZWNyYWZ0Omlyb25fYmFycwQJAG5hbWVfaGFzaPuefWSNAe56AwoAbmV0d29ya19pZOcfAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQUAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdsYXNzBAkAbmFtZV9oYXNowGJByfWff6gDCgBuZXR3b3JrX2lkQCwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:white_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAAAACAQAbmFtZR0AbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iHubqoMbu9fAMKAG5ldHdvcmtfaWSdIQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:light_gray_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaKKa+LrRsHQhAwoAbmV0d29ya19pZJ4EAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:gray_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAwAACAQAbmFtZRwAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaIETy7Y/HZREAwoAbmV0d29ya19pZN0XAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:black_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2iV6BCwpfDMmwMKAG5ldHdvcmtfaWRZKQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:brown_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAwAACAQAbmFtZR0AbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2igsEiq5np8JgMKAG5ldHdvcmtfaWTxBgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAwAACAQAbmFtZRsAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoCa2J12/lQoIDCgBuZXR3b3JrX2lkPSMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:orange_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAwAACAQAbmFtZR4AbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNozgjAuvzhxGsDCgBuZXR3b3JrX2lk8RwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:yellow_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAwAACAQAbmFtZR4AbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNo7EbHMd5WVugDCgBuZXR3b3JrX2lk5DMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:lime_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAwAACAQAbmFtZRwAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBtZA1nZtwcFAwoAbmV0d29ya19pZH4AAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:green_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAwAACAQAbmFtZR0AbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3MECQBuYW1lX2hhc2h91ptDgbehWwMKAG5ldHdvcmtfaWS0GwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cyan_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAwAACAQAbmFtZRwAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaBkIYQ8nQLqbAwoAbmV0d29ya19pZFgpAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:light_blue_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAwAACAQAbmFtZSIAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaLt05n1G0fiSAwoAbmV0d29ya19pZIYlAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:blue_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaPhLocSfzduRAwoAbmV0d29ya19pZGIlAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:purple_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAwAACAQAbmFtZR4AbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzBAkAbmFtZV9oYXNoJk0DhRO0szUDCgBuZXR3b3JrX2lkPQoAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:magenta_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAwAACAQAbmFtZR8AbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaFEDeFiJj3zSAwoAbmV0d29ya19pZGgyAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:pink_stained_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAwAACAQAbmFtZRwAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzcwQJAG5hbWVfaGFzaDijTX87ywxhAwoAbmV0d29ya19pZPYbAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:tinted_glass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAgAACAQAbmFtZRYAbWluZWNyYWZ0OnRpbnRlZF9nbGFzcwQJAG5hbWVfaGFzaAFZWSamk6KdAwoAbmV0d29ya19pZNkpAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdsYXNzX3BhbmUECQBuYW1lX2hhc2gRSBHwNMQ4gQMKAG5ldHdvcmtfaWQvIwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:white_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAAAACAQAbmFtZSIAbWluZWNyYWZ0OndoaXRlX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaHgxQmgJVtRrAwoAbmV0d29ya19pZPIcAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:light_gray_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSJAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNon0aQw9lNkSEDCgBuZXR3b3JrX2lkoAQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:gray_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSIAwAACAQAbmFtZSEAbWluZWNyYWZ0OmdyYXlfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNors74IIw+2MMDCgBuZXR3b3JrX2lkTi8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:black_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJsYWNrX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaOK/5ZRRd+M1AwoAbmV0d29ya19pZEQKAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:brown_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAwAACAQAbmFtZSIAbWluZWNyYWZ0OmJyb3duX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaLHeGJyRFTIWAwoAbmV0d29ya19pZN4CAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:red_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAwAACAQAbmFtZSAAbWluZWNyYWZ0OnJlZF9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2gGr4x6JheAywMKAG5ldHdvcmtfaWQtMAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:orange_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAwAACAQAbmFtZSMAbWluZWNyYWZ0Om9yYW5nZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hbHxPD2gEbEAMKAG5ldHdvcmtfaWSIAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:yellow_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAwAACAQAbmFtZSMAbWluZWNyYWZ0OnllbGxvd19zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2g9tl4aOCyZBwMKAG5ldHdvcmtfaWQxAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:lime_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAwAACAQAbmFtZSEAbWluZWNyYWZ0OmxpbWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3CtUyLwoGegDCgBuZXR3b3JrX2lk4jMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:green_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAwAACAQAbmFtZSIAbWluZWNyYWZ0OmdyZWVuX3N0YWluZWRfZ2xhc3NfcGFuZQQJAG5hbWVfaGFzaJo6YP7IMy9SAwoAbmV0d29ya19pZBgbAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cyan_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAwAACAQAbmFtZSEAbWluZWNyYWZ0OmN5YW5fc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoti97c6QrbLQDCgBuZXR3b3JrX2lkmy0AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:light_blue_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAwAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNovDg/gQle104DCgBuZXR3b3JrX2lkDBoAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:blue_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAwAACAQAbmFtZSEAbWluZWNyYWZ0OmJsdWVfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoGc57tiexbQMDCgBuZXR3b3JrX2lkVAAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:purple_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAwAACAQAbmFtZSMAbWluZWNyYWZ0OnB1cnBsZV9zdGFpbmVkX2dsYXNzX3BhbmUECQBuYW1lX2hhc2hDJHYdd0FdfQMKAG5ldHdvcmtfaWSeIQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:magenta_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAwAACAQAbmFtZSQAbWluZWNyYWZ0Om1hZ2VudGFfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNo3pcOw5bs5XoDCgBuZXR3b3JrX2lk5h8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:pink_stained_glass_pane", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAwAACAQAbmFtZSEAbWluZWNyYWZ0OnBpbmtfc3RhaW5lZF9nbGFzc19wYW5lBAkAbmFtZV9oYXNoWRhSACMWgswDCgBuZXR3b3JrX2lkMjAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:ladder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRBAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxhZGRlcgQJAG5hbWVfaGFzaKBhqheJVOz+AwoAbmV0d29ya19pZPo2AAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:scaffolding", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNjYWZmb2xkaW5nBAkAbmFtZV9oYXNoYrkevrqcljwDCgBuZXR3b3JrX2lkRBcAAAoGAHN0YXRlcwMJAHN0YWJpbGl0eQAAAAABDwBzdGFiaWxpdHlfY2hlY2sAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSeGwAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQwAc21vb3RoX3N0b25lAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkqSUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNAUAc3RvbmUAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWShGwAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQsAY29iYmxlc3RvbmUAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkjCUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhEAbW9zc3lfY29iYmxlc3RvbmUAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkZiMAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUDAG9hawADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkZyMAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkaCMAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkaSMAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkaiMAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:wooden_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAAAACAQAbmFtZRUAbWluZWNyYWZ0Ondvb2Rlbl9zbGFiBAkAbmFtZV9oYXNoBVBkRBCCh4MDCgBuZXR3b3JrX2lkayMAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20ICQB3b29kX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:mangrove_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3NsYWIECQBuYW1lX2hhc2jYCcmhJPeNMwMKAG5ldHdvcmtfaWQYCgAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cherry_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV9zbGFiBAkAbmFtZV9oYXNoTt0MmVn/mqoDCgBuZXR3b3JrX2lkZSwAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:bamboo_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQAAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJhbWJvb19zbGFiBAkAbmFtZV9oYXNoo1xuFqINeLYDCgBuZXR3b3JrX2lkxS0AAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:bamboo_mosaic_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAwAACAQAbmFtZRwAbWluZWNyYWZ0OmJhbWJvb19tb3NhaWNfc2xhYgQJAG5hbWVfaGFzaNbVRBZ/ChI3AwoAbmV0d29ya19pZCkTAAAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSjGwAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQsAc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkpyUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAbW9zc3lfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSfGwAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQkAc2FuZHN0b25lAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkqiUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0AY3V0X3NhbmRzdG9uZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkjSUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAc21vb3RoX3NhbmRzdG9uZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkhyUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg0AcmVkX3NhbmRzdG9uZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkqyUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNBEAY3V0X3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkmCUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxQAc21vb3RoX3JlZF9zYW5kc3RvbmUAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lknSUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZ3Jhbml0ZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkniUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZ3Jhbml0ZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkmyUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwcAZGlvcml0ZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lknCUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxAAcG9saXNoZWRfZGlvcml0ZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkmiUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMwgAYW5kZXNpdGUAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lkmSUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMxEAcG9saXNoZWRfYW5kZXNpdGUAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSiGwAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQUAYnJpY2sAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSlGwAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQwAbmV0aGVyX2JyaWNrAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkjiUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcmVkX25ldGhlcl9icmljawADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab3", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIzBAkAbmFtZV9oYXNoMw3274NQmpMDCgBuZXR3b3JrX2lklyUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMw8AZW5kX3N0b25lX2JyaWNrAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_block_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAAAACAQAbmFtZRoAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIECQBuYW1lX2hhc2gAP8n+Ya6BWgMKAG5ldHdvcmtfaWSkGwAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQgPAHN0b25lX3NsYWJfdHlwZQYAcXVhcnR6AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_block_slab4", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWI0BAkAbmFtZV9oYXNoNA3274NQmpMDCgBuZXR3b3JrX2lkqCUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfNA0Ac21vb3RoX3F1YXJ0egADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkiCUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMgYAcHVycHVyAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkiSUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9yb3VnaAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkiiUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMg8AcHJpc21hcmluZV9kYXJrAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_block_slab2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AAAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lX2Jsb2NrX3NsYWIyBAkAbmFtZV9oYXNoMg3274NQmpMDCgBuZXR3b3JrX2lkiyUAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20IEQBzdG9uZV9zbGFiX3R5cGVfMhAAcHJpc21hcmluZV9icmljawADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:crimson_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc2xhYgQJAG5hbWVfaGFzaKZ+EfP0ZYOZAwoAbmV0d29ya19pZEApAAAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:warped_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAgAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zbGFiBAkAbmFtZV9oYXNo/AT0e/Z9W7UDCgBuZXR3b3JrX2lkoC0AAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:blackstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAgAACAQAbmFtZRkAbWluZWNyYWZ0OmJsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaF/DD4ZUlNgtAwoAbmV0d29ya19pZEEJAAAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:polished_blackstone_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAgAACAQAbmFtZSIAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfc2xhYgQJAG5hbWVfaGFzaDYnuUs86EWfAwoAbmV0d29ya19pZIUrAAAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:polished_blackstone_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAgAACAQAbmFtZSgAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tfc2xhYgQJAG5hbWVfaGFzaKySLqvHc4xXAwoAbmV0d29ya19pZEsbAAAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAgAACAQAbmFtZRkAbWluZWNyYWZ0OmN1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaDsNpb2qs4iBAwoAbmV0d29ya19pZDEjAAAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:exposed_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAgAACAQAbmFtZSEAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNoahQ5OwIQb7kDCgBuZXR3b3JrX2lkIC4AAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:weathered_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAgAACAQAbmFtZSMAbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2hBIuGIOVVXogMKAG5ldHdvcmtfaWS0KwAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:oxidized_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAgAACAQAbmFtZSIAbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaOptj9ycfpaDAwoAbmV0d29ya19pZHIjAAAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:waxed_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaAlx6DZOCTHzAwoAbmV0d29ya19pZCY1AAAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:waxed_exposed_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAgAACAQAbmFtZScAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcl9zbGFiBAkAbmFtZV9oYXNo3KqS5OnhtRIDCgBuZXR3b3JrX2lkpQIAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:waxed_weathered_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAgAACAQAbmFtZSkAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyX3NsYWIECQBuYW1lX2hhc2gzZ1oX0HCFtwMKAG5ldHdvcmtfaWToLQAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTAAgAACAQAbmFtZSgAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXJfc2xhYgQJAG5hbWVfaGFzaMjjTnLu1KcqAwoAbmV0d29ya19pZL0HAAAKBgBzdGF0ZXMIFwBtaW5lY3JhZnQ6dmVydGljYWxfaGFsZgYAYm90dG9tAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cobbled_deepslate_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AgAACAQAbmFtZSAAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlX3NsYWIECQBuYW1lX2hhc2gwJIVWK1TM2QMKAG5ldHdvcmtfaWTLMgAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_deepslate_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AgAACAQAbmFtZSEAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZV9zbGFiBAkAbmFtZV9oYXNoC/Adiz8k6RYDCgBuZXR3b3JrX2lk5wIAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:deepslate_tile_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlX3NsYWIECQBuYW1lX2hhc2hPydV6emzIXAMKAG5ldHdvcmtfaWS2GwAACgYAc3RhdGVzCBcAbWluZWNyYWZ0OnZlcnRpY2FsX2hhbGYGAGJvdHRvbQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:deepslate_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSHAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja19zbGFiBAkAbmFtZV9oYXNoSv62V7iw10UDCgBuZXR3b3JrX2lk3xcAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:mud_brick_slab", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAgAACAQAbmFtZRgAbWluZWNyYWZ0Om11ZF9icmlja19zbGFiBAkAbmFtZV9oYXNoq/tGBQWkv08DCgBuZXR3b3JrX2lkJxoAAAoGAHN0YXRlcwgXAG1pbmVjcmFmdDp2ZXJ0aWNhbF9oYWxmBgBib3R0b20AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:brick_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAAAACAQAbmFtZRUAbWluZWNyYWZ0OmJyaWNrX2Jsb2NrBAkAbmFtZV9oYXNo5Qc2E005S3oDCgBuZXR3b3JrX2lksh8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:chiseled_nether_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNoaXNlbGVkX25ldGhlcl9icmlja3MECQBuYW1lX2hhc2g31SBPTcUK1QMKAG5ldHdvcmtfaWR7MgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cracked_nether_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAgAACAQAbmFtZR8AbWluZWNyYWZ0OmNyYWNrZWRfbmV0aGVyX2JyaWNrcwQJAG5hbWVfaGFzaAdC6eKzXT5tAwoAbmV0d29ya19pZPMcAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:quartz_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAgAACAQAbmFtZRcAbWluZWNyYWZ0OnF1YXJ0el9icmlja3MECQBuYW1lX2hhc2jSZO590dd8sAMKAG5ldHdvcmtfaWTrLAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stonebrick", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWTqLQAACgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAZGVmYXVsdAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stonebrick", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWTrLQAACgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQUAbW9zc3kAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stonebrick", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWTsLQAACgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQcAY3JhY2tlZAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stonebrick", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAAAACAQAbmFtZRQAbWluZWNyYWZ0OnN0b25lYnJpY2sECQBuYW1lX2hhc2ii9DAAVXKptwMKAG5ldHdvcmtfaWTtLQAACgYAc3RhdGVzCBAAc3RvbmVfYnJpY2tfdHlwZQgAY2hpc2VsZWQAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:end_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAAAACAQAbmFtZRQAbWluZWNyYWZ0OmVuZF9icmlja3MECQBuYW1lX2hhc2hIUFfxNLZaFgMKAG5ldHdvcmtfaWTfAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:prismarine", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWThKwAACgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBgBicmlja3MAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:polished_blackstone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnJpY2tzBAkAbmFtZV9oYXNoIHgsgIdzKXcDCgBuZXR3b3JrX2lkNR8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cracked_polished_blackstone_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAgAACAQAbmFtZSwAbWluZWNyYWZ0OmNyYWNrZWRfcG9saXNoZWRfYmxhY2tzdG9uZV9icmlja3MECQBuYW1lX2hhc2jQIO1GQDk80AMKAG5ldHdvcmtfaWRGMgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:gilded_blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAgAACAQAbmFtZRsAbWluZWNyYWZ0OmdpbGRlZF9ibGFja3N0b25lBAkAbmFtZV9oYXNoNoWt1ocG0HEDCgBuZXR3b3JrX2lkKR0AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:chiseled_polished_blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAgAACAQAbmFtZSYAbWluZWNyYWZ0OmNoaXNlbGVkX3BvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2gzFa+kEjCJgAMKAG5ldHdvcmtfaWSEIgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:deepslate_tiles", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAgAACAQAbmFtZRkAbWluZWNyYWZ0OmRlZXBzbGF0ZV90aWxlcwQJAG5hbWVfaGFzaGcLLx3NXAFvAwoAbmV0d29ya19pZBEdAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cracked_deepslate_tiles", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAgAACAQAbmFtZSEAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX3RpbGVzBAkAbmFtZV9oYXNo9zWgkFuMM1QDCgBuZXR3b3JrX2lkJBsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:deepslate_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSGAgAACAQAbmFtZRoAbWluZWNyYWZ0OmRlZXBzbGF0ZV9icmlja3MECQBuYW1lX2hhc2gucvFmPdZxigMKAG5ldHdvcmtfaWQ/JAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cracked_deepslate_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAgAACAQAbmFtZSIAbWluZWNyYWZ0OmNyYWNrZWRfZGVlcHNsYXRlX2JyaWNrcwQJAG5hbWVfaGFzaN40aqhh9WqHAwoAbmV0d29ya19pZLcjAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:chiseled_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAgAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaEU7/uRG8HSBAwoAbmV0d29ya19pZDAjAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cobblestone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAAAACAQAbmFtZRUAbWluZWNyYWZ0OmNvYmJsZXN0b25lBAkAbmFtZV9oYXNoPoK7mGlSUz4DCgBuZXR3b3JrX2lkcxcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:mossy_cobblestone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAAAACAQAbmFtZRsAbWluZWNyYWZ0Om1vc3N5X2NvYmJsZXN0b25lBAkAbmFtZV9oYXNoGJ67FCbkChMDCgBuZXR3b3JrX2lkqAIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cobbled_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AgAACAQAbmFtZRsAbWluZWNyYWZ0OmNvYmJsZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoLUz9Y/ywmLwDCgBuZXR3b3JrX2lkaS4AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:smooth_stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS2AQAACAQAbmFtZRYAbWluZWNyYWZ0OnNtb290aF9zdG9uZQQJAG5hbWVfaGFzaMwf87/JaTNvAwoAbmV0d29ya19pZBIdAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZJ0XAAAKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUHAGRlZmF1bHQAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZJ4XAAAKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGULAGhlaXJvZ2x5cGhzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZJ8XAAAKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUDAGN1dAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNhbmRzdG9uZQQJAG5hbWVfaGFzaFEmWsEHFI1AAwoAbmV0d29ya19pZKAXAAAKBgBzdGF0ZXMIDwBzYW5kX3N0b25lX3R5cGUGAHNtb290aAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWQLLgAACgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWQMLgAACgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlCwBoZWlyb2dseXBocwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWQNLgAACgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlAwBjdXQAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:red_sandstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSzAAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZF9zYW5kc3RvbmUECQBuYW1lX2hhc2jBO4Gv2v59uAMKAG5ldHdvcmtfaWQOLgAACgYAc3RhdGVzCA8Ac2FuZF9zdG9uZV90eXBlBgBzbW9vdGgAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coal_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWStAAAACAQAbmFtZRQAbWluZWNyYWZ0OmNvYWxfYmxvY2sECQBuYW1lX2hhc2jH8QQP3t5PiAMKAG5ldHdvcmtfaWTcIwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:dried_kelp_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAQAACAQAbmFtZRoAbWluZWNyYWZ0OmRyaWVkX2tlbHBfYmxvY2sECQBuYW1lX2hhc2iRoucexkrl8wMKAG5ldHdvcmtfaWTKNQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:gold_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdvbGRfYmxvY2sECQBuYW1lX2hhc2iYLshvjtXzFwMKAG5ldHdvcmtfaWQKAwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:iron_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAAAACAQAbmFtZRQAbWluZWNyYWZ0Omlyb25fYmxvY2sECQBuYW1lX2hhc2jYINmJQbvV/gMKAG5ldHdvcmtfaWT5NgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:copper_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAgAACAQAbmFtZRYAbWluZWNyYWZ0OmNvcHBlcl9ibG9jawQJAG5hbWVfaGFzaDVxnehsGaZ1AwoAbmV0d29ya19pZBgfAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:exposed_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAgAACAQAbmFtZRgAbWluZWNyYWZ0OmV4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoQH3Fukmu3CEDCgBuZXR3b3JrX2lkRgUAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:weathered_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAgAACAQAbmFtZRoAbWluZWNyYWZ0OndlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2hJCQXbvobv+gMKAG5ldHdvcmtfaWTVNgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:oxidized_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om94aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMDtJqR0G5Y7AwoAbmV0d29ya19pZDEXAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:waxed_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAgAACAQAbmFtZRYAbWluZWNyYWZ0OndheGVkX2NvcHBlcgQJAG5hbWVfaGFzaPF+FG6Eh5fsAwoAbmV0d29ya19pZIA0AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:waxed_exposed_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAgAACAQAbmFtZR4AbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY29wcGVyBAkAbmFtZV9oYXNoig8IOc+SCikDCgBuZXR3b3JrX2lkrwcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:waxed_weathered_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAgAACAQAbmFtZSAAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jb3BwZXIECQBuYW1lX2hhc2gjtPq8MOdvKgMKAG5ldHdvcmtfaWS8BwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:waxed_oxidized_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS9AgAACAQAbmFtZR8AbWluZWNyYWZ0OndheGVkX294aWRpemVkX2NvcHBlcgQJAG5hbWVfaGFzaMaORhsO+LzjAwoAbmV0d29ya19pZLUzAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAgAACAQAbmFtZRQAbWluZWNyYWZ0OmN1dF9jb3BwZXIECQBuYW1lX2hhc2hAfN3NGax3eAMKAG5ldHdvcmtfaWQ+HwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:exposed_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAgAACAQAbmFtZRwAbWluZWNyYWZ0OmV4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaA85G3yv/w6pAwoAbmV0d29ya19pZEIsAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:weathered_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAgAACAQAbmFtZR4AbWluZWNyYWZ0OndlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoVgRV0fBaz88DCgBuZXR3b3JrX2lkNTIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:oxidized_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAgAACAQAbmFtZR0AbWluZWNyYWZ0Om94aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2iP8WmFWOkriwMKAG5ldHdvcmtfaWRNJAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:waxed_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWReAgAACAQAbmFtZRoAbWluZWNyYWZ0OndheGVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2jumiwOZIqv2AMKAG5ldHdvcmtfaWS6MgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:waxed_exposed_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAgAACAQAbmFtZSIAbWluZWNyYWZ0OndheGVkX2V4cG9zZWRfY3V0X2NvcHBlcgQJAG5hbWVfaGFzaPE/OfK6IoVMAwoAbmV0d29ya19pZEQYAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:waxed_weathered_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAgAACAQAbmFtZSQAbWluZWNyYWZ0OndheGVkX3dlYXRoZXJlZF9jdXRfY29wcGVyBAkAbmFtZV9oYXNoCA1xDp11bnwDCgBuZXR3b3JrX2lknCEAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:waxed_oxidized_cut_copper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWS+AgAACAQAbmFtZSMAbWluZWNyYWZ0OndheGVkX294aWRpemVkX2N1dF9jb3BwZXIECQBuYW1lX2hhc2i1pZAsZYHLDAMKAG5ldHdvcmtfaWR5AgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:emerald_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAAAACAQAbmFtZRcAbWluZWNyYWZ0OmVtZXJhbGRfYmxvY2sECQBuYW1lX2hhc2hK6QunqJznNAMKAG5ldHdvcmtfaWQkCgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:diamond_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AAAACAQAbmFtZRcAbWluZWNyYWZ0OmRpYW1vbmRfYmxvY2sECQBuYW1lX2hhc2iGKrxuvkytFQMKAG5ldHdvcmtfaWTRAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:lapis_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxhcGlzX2Jsb2NrBAkAbmFtZV9oYXNoDZ44xdb2zVoDCgBuZXR3b3JrX2lkrhsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:raw_iron_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19pcm9uX2Jsb2NrBAkAbmFtZV9oYXNo9XyzNIQXxvwDCgBuZXR3b3JrX2lk9jYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:raw_copper_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAgAACAQAbmFtZRoAbWluZWNyYWZ0OnJhd19jb3BwZXJfYmxvY2sECQBuYW1lX2hhc2hw1KG0TNUGgwMKAG5ldHdvcmtfaWRlIwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:raw_gold_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJhd19nb2xkX2Jsb2NrBAkAbmFtZV9oYXNo6YuwuLwfOBwDCgBuZXR3b3JrX2lkVAQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:quartz_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZMgXAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:quartz_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZMoXAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:quartz_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZMkXAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQgAY2hpc2VsZWQICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:quartz_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAAAACAQAbmFtZRYAbWluZWNyYWZ0OnF1YXJ0el9ibG9jawQJAG5hbWVfaGFzaCfpbqyIIvZCAwoAbmV0d29ya19pZMsXAAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQYAc21vb3RoCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:prismarine", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWTfKwAACgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:prismarine", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAAAACAQAbmFtZRQAbWluZWNyYWZ0OnByaXNtYXJpbmUECQBuYW1lX2hhc2jcnQCHi9CspQMKAG5ldHdvcmtfaWTgKwAACgYAc3RhdGVzCBUAcHJpc21hcmluZV9ibG9ja190eXBlBABkYXJrAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:slime", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnNsaW1lBAkAbmFtZV9oYXNoHJiEEJx+JlkDCgBuZXR3b3JrX2lkdhsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:honey_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAQAACAQAbmFtZRUAbWluZWNyYWZ0OmhvbmV5X2Jsb2NrBAkAbmFtZV9oYXNo9zLYSUlelywDCgBuZXR3b3JrX2lkHwkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:honeycomb_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAQAACAQAbmFtZRkAbWluZWNyYWZ0OmhvbmV5Y29tYl9ibG9jawQJAG5hbWVfaGFzaASIPuOCYd1oAwoAbmV0d29ya19pZKUcAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:hay_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAAAACAQAbmFtZRMAbWluZWNyYWZ0OmhheV9ibG9jawQJAG5hbWVfaGFzaIB2VxKxX8EpAwoAbmV0d29ya19pZLAHAAAKBgBzdGF0ZXMDCgBkZXByZWNhdGVkAAAAAAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:bone_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAAAACAQAbmFtZRQAbWluZWNyYWZ0OmJvbmVfYmxvY2sECQBuYW1lX2hhc2i4ZX576W9AWgMKAG5ldHdvcmtfaWR3GwAACgYAc3RhdGVzAwoAZGVwcmVjYXRlZAAAAAAICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:nether_brick", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAAAACAQAbmFtZRYAbWluZWNyYWZ0Om5ldGhlcl9icmljawQJAG5hbWVfaGFzaMxcRiheU+nXAwoAbmV0d29ya19pZKUyAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:red_nether_brick", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAAAACAQAbmFtZRoAbWluZWNyYWZ0OnJlZF9uZXRoZXJfYnJpY2sECQBuYW1lX2hhc2j8pRO4LfoECAMKAG5ldHdvcmtfaWQ0AgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:netherite_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcml0ZV9ibG9jawQJAG5hbWVfaGFzaMghh6Zib/ZKAwoAbmV0d29ya19pZCEYAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:lodestone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAQAACAQAbmFtZRMAbWluZWNyYWZ0OmxvZGVzdG9uZQQJAG5hbWVfaGFzaJ2gmHOTlXv8AwoAbmV0d29ya19pZPM2AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:white_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAAAACAQAbmFtZRQAbWluZWNyYWZ0OndoaXRlX3dvb2wECQBuYW1lX2hhc2jRWB7vaIEDiQMKAG5ldHdvcmtfaWTdIwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:light_gray_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfd29vbAQJAG5hbWVfaGFzaOpdQ1a2v4b3AwoAbmV0d29ya19pZAo2AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:gray_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAwAACAQAbmFtZRMAbWluZWNyYWZ0OmdyYXlfd29vbAQJAG5hbWVfaGFzaLsc1Lp1xdIOAwoAbmV0d29ya19pZIcCAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:black_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrX3dvb2wECQBuYW1lX2hhc2hP2HC6o0X4HAMKAG5ldHdvcmtfaWRXBAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:brown_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAwAACAQAbmFtZRQAbWluZWNyYWZ0OmJyb3duX3dvb2wECQBuYW1lX2hhc2ig5IW89PrREwMKAG5ldHdvcmtfaWS9AgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAwAACAQAbmFtZRIAbWluZWNyYWZ0OnJlZF93b29sBAkAbmFtZV9oYXNoY4TBDq+mFgUDCgBuZXR3b3JrX2lkfwAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:orange_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAwAACAQAbmFtZRUAbWluZWNyYWZ0Om9yYW5nZV93b29sBAkAbmFtZV9oYXNoFstfrTZfSCgDCgBuZXR3b3JrX2lknAcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:yellow_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQtAwAACAQAbmFtZRUAbWluZWNyYWZ0OnllbGxvd193b29sBAkAbmFtZV9oYXNoTFyus2RHegcDCgBuZXR3b3JrX2lkKgIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:lime_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAwAACAQAbmFtZRMAbWluZWNyYWZ0OmxpbWVfd29vbAQJAG5hbWVfaGFzaNVnnzKiMxmeAwoAbmV0d29ya19pZHorAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:green_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAwAACAQAbmFtZRQAbWluZWNyYWZ0OmdyZWVuX3dvb2wECQBuYW1lX2hhc2i3mElRYHIcSQMKAG5ldHdvcmtfaWTtFwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cyan_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQwAwAACAQAbmFtZRMAbWluZWNyYWZ0OmN5YW5fd29vbAQJAG5hbWVfaGFzaBNDfvHn8dqFAwoAbmV0d29ya19pZKEjAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:light_blue_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfd29vbAQJAG5hbWVfaGFzaLWFAUfyxFPNAwoAbmV0d29ya19pZDMwAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:blue_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAwAACAQAbmFtZRMAbWluZWNyYWZ0OmJsdWVfd29vbAQJAG5hbWVfaGFzaLjHyxxbTWCLAwoAbmV0d29ya19pZE4kAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:purple_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAwAACAQAbmFtZRUAbWluZWNyYWZ0OnB1cnBsZV93b29sBAkAbmFtZV9oYXNojvFtqzjAf/4DCgBuZXR3b3JrX2lk+DYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:magenta_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AwAACAQAbmFtZRYAbWluZWNyYWZ0Om1hZ2VudGFfd29vbAQJAG5hbWVfaGFzaGuOHvf+Pd4yAwoAbmV0d29ya19pZG8JAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:pink_wool", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ1AwAACAQAbmFtZRMAbWluZWNyYWZ0OnBpbmtfd29vbAQJAG5hbWVfaGFzaPiVA2pFeoFLAwoAbmV0d29ya19pZCIYAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:white_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAAAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhcnBldAQJAG5hbWVfaGFzaNeMHTI1fWPXAwoAbmV0d29ya19pZJkyAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:light_gray_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FycGV0BAkAbmFtZV9oYXNoHPw6ArBAsP0DCgBuZXR3b3JrX2lk9zYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:gray_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRaAwAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FycGV0BAkAbmFtZV9oYXNoZVR0OI+1VRADCgBuZXR3b3JrX2lkigIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:black_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRiAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhcnBldAQJAG5hbWVfaGFzaOk7LP9NptyhAwoAbmV0d29ya19pZKErAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:brown_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRfAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhcnBldAQJAG5hbWVfaGFzaNaXFyOsAvIvAwoAbmV0d29ya19pZFIJAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:red_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAwAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYXJwZXQECQBuYW1lX2hhc2i9eSKBf6SO3wMKAG5ldHdvcmtfaWQ3MwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:orange_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAwAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYXJwZXQECQBuYW1lX2hhc2hIUkO4HlAdygMKAG5ldHdvcmtfaWQKMAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:yellow_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAwAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYXJwZXQECQBuYW1lX2hhc2hSDKX3scCamwMKAG5ldHdvcmtfaWRXKQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:lime_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAwAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FycGV0BAkAbmFtZV9oYXNo+6KFOpzsib4DCgBuZXR3b3JrX2lklS4AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:green_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRgAwAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhcnBldAQJAG5hbWVfaGFzaCHPMP9ltqFJAwoAbmV0d29ya19pZO4XAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cyan_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRcAwAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FycGV0BAkAbmFtZV9oYXNobXf62dQBJj8DCgBuZXR3b3JrX2lkdhcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:light_blue_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAwAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FycGV0BAkAbmFtZV9oYXNo20l4oktdZ3sDCgBuZXR3b3JrX2lk6R8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:blue_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWReAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FycGV0BAkAbmFtZV9oYXNo3p3lsW0eQwsDCgBuZXR3b3JrX2lkVQIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:purple_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRdAwAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYXJwZXQECQBuYW1lX2hhc2jwIA9pW/qp7QMKAG5ldHdvcmtfaWSRNAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:magenta_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRVAwAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FycGV0BAkAbmFtZV9oYXNoFXT36YNNZhMDCgBuZXR3b3JrX2lkrAIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:pink_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FycGV0BAkAbmFtZV9oYXNoHll72oqk+OoDCgBuZXR3b3JrX2lkVzQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:white_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTtAAAACAQAbmFtZR8AbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaFUk9iXVjwV8AwoAbmV0d29ya19pZGohAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:light_gray_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo7EUk30hmUtYDCgBuZXR3b3JrX2lkiTIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:gray_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAwAACAQAbmFtZR4AbWluZWNyYWZ0OmdyYXlfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoW77af6WihdwDCgBuZXR3b3JrX2lkATMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:black_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTSAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaAfWYp0xtgcfAwoAbmV0d29ya19pZHkEAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:brown_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaB74EeiLO46XAwoAbmV0d29ya19pZJMnAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:red_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAwAACAQAbmFtZR0AbWluZWNyYWZ0OnJlZF9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gjFut6Z/VH1gMKAG5ldHdvcmtfaWSIMgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:orange_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAwAACAQAbmFtZSAAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2gADDj2IJiw+gMKAG5ldHdvcmtfaWTSNgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:yellow_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAwAACAQAbmFtZSAAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iy6qKNn3ob5wMKAG5ldHdvcmtfaWTdMwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:lime_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAwAACAQAbmFtZR4AbWluZWNyYWZ0OmxpbWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNo4dYIPslbXPUDCgBuZXR3b3JrX2lk3jUAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:green_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAwAACAQAbmFtZR8AbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlX3Bvd2RlcgQJAG5hbWVfaGFzaM/c9x2aJh3HAwoAbmV0d29ya19pZM0vAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cyan_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAwAACAQAbmFtZR4AbWluZWNyYWZ0OmN5YW5fY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNok+xKAe7XXjoDCgBuZXR3b3JrX2lkGhcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:light_blue_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAwAACAQAbmFtZSQAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNogScpIQceyAEDCgBuZXR3b3JrX2lkPgAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:blue_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTOAwAACAQAbmFtZR4AbWluZWNyYWZ0OmJsdWVfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoFp7mmeL86r0DCgBuZXR3b3JrX2lkki4AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:purple_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAwAACAQAbmFtZSAAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZV9wb3dkZXIECQBuYW1lX2hhc2iYcVU04hoStwMKAG5ldHdvcmtfaWThLQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:magenta_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAwAACAQAbmFtZSEAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoy/70q6VPsWgDCgBuZXR3b3JrX2lkhBwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:pink_concrete_powder", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAwAACAQAbmFtZR4AbWluZWNyYWZ0OnBpbmtfY29uY3JldGVfcG93ZGVyBAkAbmFtZV9oYXNoVikSAf8DwV0DCgBuZXR3b3JrX2lkuBsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:white_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTsAAAACAQAbmFtZRgAbWluZWNyYWZ0OndoaXRlX2NvbmNyZXRlBAkAbmFtZV9oYXNo6zAp7lsLlvkDCgBuZXR3b3JrX2lkJzYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:light_gray_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY29uY3JldGUECQBuYW1lX2hhc2hEtet5wuDIKAMKAG5ldHdvcmtfaWSmBwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:gray_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AwAACAQAbmFtZRcAbWluZWNyYWZ0OmdyYXlfY29uY3JldGUECQBuYW1lX2hhc2j92INnb0a83AMKAG5ldHdvcmtfaWQCMwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:black_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAwAACAQAbmFtZRgAbWluZWNyYWZ0OmJsYWNrX2NvbmNyZXRlBAkAbmFtZV9oYXNo2X7NDIQmZ70DCgBuZXR3b3JrX2lkgi4AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:brown_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AwAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX2NvbmNyZXRlBAkAbmFtZV9oYXNoeka02BwXf6oDCgBuZXR3b3JrX2lkZCwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSAAwAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9jb25jcmV0ZQQJAG5hbWVfaGFzaPWmNowLGubqAwoAbmV0d29ya19pZFY0AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:orange_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRzAwAACAQAbmFtZRkAbWluZWNyYWZ0Om9yYW5nZV9jb25jcmV0ZQQJAG5hbWVfaGFzaAgE8XmaAi6+AwoAbmV0d29ya19pZJMuAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:yellow_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR2AwAACAQAbmFtZRkAbWluZWNyYWZ0OnllbGxvd19jb25jcmV0ZQQJAG5hbWVfaGFzaE6ONfJPBd0+AwoAbmV0d29ya19pZHUXAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:lime_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR3AwAACAQAbmFtZRcAbWluZWNyYWZ0OmxpbWVfY29uY3JldGUECQBuYW1lX2hhc2gnd8JW6wmJcAMKAG5ldHdvcmtfaWQlHQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:green_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR/AwAACAQAbmFtZRgAbWluZWNyYWZ0OmdyZWVuX2NvbmNyZXRlBAkAbmFtZV9oYXNokbFxRKchQZkDCgBuZXR3b3JrX2lkPSkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cyan_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AwAACAQAbmFtZRcAbWluZWNyYWZ0OmN5YW5fY29uY3JldGUECQBuYW1lX2hhc2hFRrWJ33qj1wMKAG5ldHdvcmtfaWSaMgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:light_blue_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR1AwAACAQAbmFtZR0AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY29uY3JldGUECQBuYW1lX2hhc2gHAe0kl0SE4AMKAG5ldHdvcmtfaWRKMwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:blue_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AwAACAQAbmFtZRcAbWluZWNyYWZ0OmJsdWVfY29uY3JldGUECQBuYW1lX2hhc2hiay301nnj1wMKAG5ldHdvcmtfaWSkMgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:purple_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR8AwAACAQAbmFtZRkAbWluZWNyYWZ0OnB1cnBsZV9jb25jcmV0ZQQJAG5hbWVfaGFzaHBHflsPIwdXAwoAbmV0d29ya19pZEYbAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:magenta_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AwAACAQAbmFtZRoAbWluZWNyYWZ0Om1hZ2VudGFfY29uY3JldGUECQBuYW1lX2hhc2gN7LuB/OvdZAMKAG5ldHdvcmtfaWQpHAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:pink_concrete", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpbmtfY29uY3JldGUECQBuYW1lX2hhc2ii2G5F0u3SOAMKAG5ldHdvcmtfaWSXFQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:clay", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmNsYXkECQBuYW1lX2hhc2j/S6sKXRcpzwMKAG5ldHdvcmtfaWRjMAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:hardened_clay", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSsAAAACAQAbmFtZRcAbWluZWNyYWZ0OmhhcmRlbmVkX2NsYXkECQBuYW1lX2hhc2jrnRwCJ0krJAMKAG5ldHdvcmtfaWRmBQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:white_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAAAACAQAbmFtZRoAbWluZWNyYWZ0OndoaXRlX3RlcnJhY290dGEECQBuYW1lX2hhc2j3RSdgmnAIewMKAG5ldHdvcmtfaWToHwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:light_gray_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2dyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAz1Ri3wIxomAwoAbmV0d29ya19pZOwGAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:gray_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAwAACAQAbmFtZRkAbWluZWNyYWZ0OmdyYXlfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAXdSLAaNZ9vAwoAbmV0d29ya19pZBQdAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:black_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsYWNrX3RlcnJhY290dGEECQBuYW1lX2hhc2jxssdv5vlbpgMKAG5ldHdvcmtfaWT0KwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:brown_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJyb3duX3RlcnJhY290dGEECQBuYW1lX2hhc2gG4kPenmOF9gMKAG5ldHdvcmtfaWT4NQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAwAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo7fX56HXFejEDCgBuZXR3b3JrX2lkagkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:orange_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAwAACAQAbmFtZRsAbWluZWNyYWZ0Om9yYW5nZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNo0Hjmql3sruMDCgBuZXR3b3JrX2lktDMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:yellow_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAwAACAQAbmFtZRsAbWluZWNyYWZ0OnllbGxvd190ZXJyYWNvdHRhBAkAbmFtZV9oYXNoqkyKKrmA3VcDCgBuZXR3b3JrX2lkThsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:lime_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAwAACAQAbmFtZRkAbWluZWNyYWZ0OmxpbWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaANjADFOF9v7AwoAbmV0d29ya19pZNw2AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:green_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyZWVuX3RlcnJhY290dGEECQBuYW1lX2hhc2j5Ybq36yYwRQMKAG5ldHdvcmtfaWTeFwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cyan_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAwAACAQAbmFtZRkAbWluZWNyYWZ0OmN5YW5fdGVycmFjb3R0YQQJAG5hbWVfaGFzaN09COzMuHwAAwoAbmV0d29ya19pZAAAAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:light_blue_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAwAACAQAbmFtZR8AbWluZWNyYWZ0OmxpZ2h0X2JsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaOMytez7cOZiAwoAbmV0d29ya19pZBscAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:blue_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAwAACAQAbmFtZRkAbWluZWNyYWZ0OmJsdWVfdGVycmFjb3R0YQQJAG5hbWVfaGFzaF6inyTK5RpAAwoAbmV0d29ya19pZJwXAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:purple_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAwAACAQAbmFtZRsAbWluZWNyYWZ0OnB1cnBsZV90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoKF7YG61yTbEDCgBuZXR3b3JrX2lkEi0AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:magenta_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAwAACAQAbmFtZRwAbWluZWNyYWZ0Om1hZ2VudGFfdGVycmFjb3R0YQQJAG5hbWVfaGFzaLWvtpAVtztyAwoAbmV0d29ya19pZCsdAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:pink_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAwAACAQAbmFtZRkAbWluZWNyYWZ0OnBpbmtfdGVycmFjb3R0YQQJAG5hbWVfaGFzaJ7mzvyzSQZTAwoAbmV0d29ya19pZCEbAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:white_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAAAACAQAbmFtZSEAbWluZWNyYWZ0OndoaXRlX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoiVzCdoHAJo0DCgBuZXR3b3JrX2lkrSQAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:silver_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAAAACAQAbmFtZSIAbWluZWNyYWZ0OnNpbHZlcl9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaAVsA0CnhzA4AwoAbmV0d29ya19pZIkVAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:gray_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAAAACAQAbmFtZSAAbWluZWNyYWZ0OmdyYXlfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2jvLZt9u/lF/AMKAG5ldHdvcmtfaWTtNgAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:black_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJsYWNrX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoe8I4xAXbO5UDCgBuZXR3b3JrX2lkOicAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:brown_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAAAACAQAbmFtZSEAbWluZWNyYWZ0OmJyb3duX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNoSiNZOobbpjoDCgBuZXR3b3JrX2lkGxcAAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAAAACAQAbmFtZR8AbWluZWNyYWZ0OnJlZF9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaBdWFGLmCLFVAwoAbmV0d29ya19pZCsbAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:orange_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTdAAAACAQAbmFtZSIAbWluZWNyYWZ0Om9yYW5nZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaMyJMrnPr7szAwoAbmV0d29ya19pZBoKAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:yellow_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAAAACAQAbmFtZSIAbWluZWNyYWZ0OnllbGxvd19nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaN6NaIhf6m0uAwoAbmV0d29ya19pZEQJAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:lime_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAAAACAQAbmFtZSAAbWluZWNyYWZ0OmxpbWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2iF3E68/rB2EAMKAG5ldHdvcmtfaWSLAgAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:green_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAAAACAQAbmFtZSEAbWluZWNyYWZ0OmdyZWVuX2dsYXplZF90ZXJyYWNvdHRhBAkAbmFtZV9oYXNow5mo8aQDFboDCgBuZXR3b3JrX2lkKi4AAAoGAHN0YXRlcwMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:cyan_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAAAACAQAbmFtZSAAbWluZWNyYWZ0OmN5YW5fZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gnNB+cCFRJhwMKAG5ldHdvcmtfaWSxIwAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:light_blue_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAAAACAQAbmFtZSYAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2gladnCDBKCigMKAG5ldHdvcmtfaWRGJAAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:blue_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAAAACAQAbmFtZSAAbWluZWNyYWZ0OmJsdWVfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2giOZK+2nB1igMKAG5ldHdvcmtfaWRAJAAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:purple_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTbAAAACAQAbmFtZSIAbWluZWNyYWZ0OnB1cnBsZV9nbGF6ZWRfdGVycmFjb3R0YQQJAG5hbWVfaGFzaIQU03txeAfHAwoAbmV0d29ya19pZMcvAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:magenta_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAAAACAQAbmFtZSMAbWluZWNyYWZ0Om1hZ2VudGFfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2i/SNqDJbfjMgMKAG5ldHdvcmtfaWRwCQAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:pink_glazed_terracotta", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAAAACAQAbmFtZSAAbWluZWNyYWZ0OnBpbmtfZ2xhemVkX3RlcnJhY290dGEECQBuYW1lX2hhc2hik8DVt4g+twMKAG5ldHdvcmtfaWTiLQAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:purpur_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZGY0AAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQcAZGVmYXVsdAgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:purpur_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnB1cnB1cl9ibG9jawQJAG5hbWVfaGFzaAgLwnUZGlzsAwoAbmV0d29ya19pZGg0AAAKBgBzdGF0ZXMICwBjaGlzZWxfdHlwZQUAbGluZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:packed_mud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTcAgAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9tdWQECQBuYW1lX2hhc2gHOMa121h4FgMKAG5ldHdvcmtfaWTiAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:mud_bricks", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAgAACAQAbmFtZRQAbWluZWNyYWZ0Om11ZF9icmlja3MECQBuYW1lX2hhc2iDL/SVl/PewQMKAG5ldHdvcmtfaWRBLwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:nether_wart_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAAAACAQAbmFtZRsAbWluZWNyYWZ0Om5ldGhlcl93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9XGS4GNnlV4DCgBuZXR3b3JrX2lkuhsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:warped_wart_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAQAACAQAbmFtZRsAbWluZWNyYWZ0OndhcnBlZF93YXJ0X2Jsb2NrBAkAbmFtZV9oYXNo9IqDS9yUPJoDCgBuZXR3b3JrX2lkRSkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:shroomlight", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTlAQAACAQAbmFtZRUAbWluZWNyYWZ0OnNocm9vbWxpZ2h0BAkAbmFtZV9oYXNoZHCHcHX/HYADCgBuZXR3b3JrX2lkcyIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:crimson_nylium", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTnAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fbnlsaXVtBAkAbmFtZV9oYXNoOr6DJYW2bFYDCgBuZXR3b3JrX2lkQxsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:warped_nylium", + "block_state_b64": "CgAAAwgAYmxvY2tfaWToAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9ueWxpdW0ECQBuYW1lX2hhc2g0Zf89cfr3rwMKAG5ldHdvcmtfaWTpLAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:netherrack", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRXAAAACAQAbmFtZRQAbWluZWNyYWZ0Om5ldGhlcnJhY2sECQBuYW1lX2hhc2i/r5ZyRsvPyQMKAG5ldHdvcmtfaWTlLwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:basalt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhc2FsdAQJAG5hbWVfaGFzaH+UQO2yWodiAwoAbmV0d29ya19pZBccAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_basalt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTqAQAACAQAbmFtZRkAbWluZWNyYWZ0OnBvbGlzaGVkX2Jhc2FsdAQJAG5hbWVfaGFzaMS+L0gMnRcBAwoAbmV0d29ya19pZBoAAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:smooth_basalt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AgAACAQAbmFtZRcAbWluZWNyYWZ0OnNtb290aF9iYXNhbHQECQBuYW1lX2hhc2jKPUdz89kuNAMKAG5ldHdvcmtfaWQhCgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:soul_soil", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTrAQAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc29pbAQJAG5hbWVfaGFzaC1/87ccutuTAwoAbmV0d29ya19pZLElAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:dirt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWRgJQAACgYAc3RhdGVzCAkAZGlydF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:dirt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAAAACAQAbmFtZQ4AbWluZWNyYWZ0OmRpcnQECQBuYW1lX2hhc2hXp6jnXAe+kQMKAG5ldHdvcmtfaWRhJQAACgYAc3RhdGVzCAkAZGlydF90eXBlBgBjb2Fyc2UAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:farmland", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AAAACAQAbmFtZRIAbWluZWNyYWZ0OmZhcm1sYW5kBAkAbmFtZV9oYXNoxyQ5ag7LolADCgBuZXR3b3JrX2lkKRoAAAoGAHN0YXRlcwMSAG1vaXN0dXJpemVkX2Ftb3VudAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:grass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQCAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmdyYXNzBAkAbmFtZV9oYXNosppASPWFlsUDCgBuZXR3b3JrX2lkoC8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:grass_path", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTGAAAACAQAbmFtZRQAbWluZWNyYWZ0OmdyYXNzX3BhdGgECQBuYW1lX2hhc2i0/KZV8Qsy+gMKAG5ldHdvcmtfaWQvNgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:podzol", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTzAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBvZHpvbAQJAG5hbWVfaGFzaBzqokRjH4Z1AwoAbmV0d29ya19pZBcfAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:mycelium", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAAAACAQAbmFtZRIAbWluZWNyYWZ0Om15Y2VsaXVtBAkAbmFtZV9oYXNojTN09cKickIDCgBuZXR3b3JrX2lkuxcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:mud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTYAgAACAQAbmFtZQ0AbWluZWNyYWZ0Om11ZAQJAG5hbWVfaGFzaPb/3P+uLy+9AwoAbmV0d29ya19pZGsuAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnN0b25lBAkAbmFtZV9oYXNoE3mqhJxzJycDCgBuZXR3b3JrX2lk9AYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:iron_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAAAACAQAbmFtZRIAbWluZWNyYWZ0Omlyb25fb3JlBAkAbmFtZV9oYXNoS7BYtLnfx3gDCgBuZXR3b3JrX2lkPx8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:gold_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAAAACAQAbmFtZRIAbWluZWNyYWZ0OmdvbGRfb3JlBAkAbmFtZV9oYXNoC5Y+DUGXLC4DCgBuZXR3b3JrX2lkQwkAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:diamond_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AAAACAQAbmFtZRUAbWluZWNyYWZ0OmRpYW1vbmRfb3JlBAkAbmFtZV9oYXNokUOJ2wZZrGQDCgBuZXR3b3JrX2lkJxwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:lapis_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQVAAAACAQAbmFtZRMAbWluZWNyYWZ0OmxhcGlzX29yZQQJAG5hbWVfaGFzaMrmrUrSzb7qAwoAbmV0d29ya19pZFU0AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:redstone_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZHN0b25lX29yZQQJAG5hbWVfaGFzaFHVnp8Wc4JbAwoAbmV0d29ya19pZLEbAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coal_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAAAACAQAbmFtZRIAbWluZWNyYWZ0OmNvYWxfb3JlBAkAbmFtZV9oYXNo1OjA+Iuy51oDCgBuZXR3b3JrX2lkrxsAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:copper_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AgAACAQAbmFtZRQAbWluZWNyYWZ0OmNvcHBlcl9vcmUECQBuYW1lX2hhc2iSZduSntOzOwMKAG5ldHdvcmtfaWQyFwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:emerald_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVtZXJhbGRfb3JlBAkAbmFtZV9oYXNoJTovr+VgINsDCgBuZXR3b3JrX2lk8DIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:quartz_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAAAACAQAbmFtZRQAbWluZWNyYWZ0OnF1YXJ0el9vcmUECQBuYW1lX2hhc2g0yNHLMK9TaQMKAG5ldHdvcmtfaWS+HAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:nether_gold_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAgAACAQAbmFtZRkAbWluZWNyYWZ0Om5ldGhlcl9nb2xkX29yZQQJAG5hbWVfaGFzaEJZ7segIBgBAwoAbmV0d29ya19pZB0AAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:ancient_debris", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFuY2llbnRfZGVicmlzBAkAbmFtZV9oYXNoNrbxMc9AwKcDCgBuZXR3b3JrX2lkBiwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:deepslate_iron_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSQAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9pcm9uX29yZQQJAG5hbWVfaGFzaB/fDL9pgvXXAwoAbmV0d29ya19pZKYyAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:deepslate_gold_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9nb2xkX29yZQQJAG5hbWVfaGFzaF9G7WYhKFinAwoAbmV0d29ya19pZAUsAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:deepslate_diamond_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9kaWFtb25kX29yZQQJAG5hbWVfaGFzaEUH5USh+iD3AwoAbmV0d29ya19pZPk1AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:deepslate_lapis_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAgAACAQAbmFtZR0AbWluZWNyYWZ0OmRlZXBzbGF0ZV9sYXBpc19vcmUECQBuYW1lX2hhc2j+yFxU/KZs1gMKAG5ldHdvcmtfaWSKMgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:deepslate_redstone_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAgAACAQAbmFtZSAAbWluZWNyYWZ0OmRlZXBzbGF0ZV9yZWRzdG9uZV9vcmUECQBuYW1lX2hhc2iVgM3wWWD6ugMKAG5ldHdvcmtfaWQxLgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:deepslate_emerald_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAgAACAQAbmFtZR8AbWluZWNyYWZ0OmRlZXBzbGF0ZV9lbWVyYWxkX29yZQQJAG5hbWVfaGFzaNlfo5HTwS6wAwoAbmV0d29ya19pZOosAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:deepslate_coal_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAgAACAQAbmFtZRwAbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb2FsX29yZQQJAG5hbWVfaGFzaIjikmcbRrPPAwoAbmV0d29ya19pZDQyAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:deepslate_copper_ore", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAgAACAQAbmFtZR4AbWluZWNyYWZ0OmRlZXBzbGF0ZV9jb3BwZXJfb3JlBAkAbmFtZV9oYXNottjV4Ev5LAQDCgBuZXR3b3JrX2lkcgAAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:gravel", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAAAACAQAbmFtZRAAbWluZWNyYWZ0OmdyYXZlbAQJAG5hbWVfaGFzaOFxz8XJd2r/AwoAbmV0d29ya19pZBM3AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:granite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAwAACAQAbmFtZREAbWluZWNyYWZ0OmdyYW5pdGUECQBuYW1lX2hhc2iq+Dur2pw4AwMKAG5ldHdvcmtfaWRTAAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:diorite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAwAACAQAbmFtZREAbWluZWNyYWZ0OmRpb3JpdGUECQBuYW1lX2hhc2iaFsq2iinZBQMKAG5ldHdvcmtfaWSVAAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:andesite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAwAACAQAbmFtZRIAbWluZWNyYWZ0OmFuZGVzaXRlBAkAbmFtZV9oYXNosaLIEnQQoSYDCgBuZXR3b3JrX2lk8gYAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAgAACAQAbmFtZRQAbWluZWNyYWZ0OmJsYWNrc3RvbmUECQBuYW1lX2hhc2iMFYziD80D6QMKAG5ldHdvcmtfaWTlMwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AgAACAQAbmFtZRMAbWluZWNyYWZ0OmRlZXBzbGF0ZQQJAG5hbWVfaGFzaKX5pAblxz8TAwoAbmV0d29ya19pZKkCAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_granite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2dyYW5pdGUECQBuYW1lX2hhc2iLiEfys8pFIAMKAG5ldHdvcmtfaWSDBAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:polished_diorite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBvbGlzaGVkX2Rpb3JpdGUECQBuYW1lX2hhc2hTxY4fKmNmlAMKAG5ldHdvcmtfaWQzJwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:polished_andesite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRSAwAACAQAbmFtZRsAbWluZWNyYWZ0OnBvbGlzaGVkX2FuZGVzaXRlBAkAbmFtZV9oYXNovl28uFk4HuQDCgBuZXR3b3JrX2lkujMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:polished_blackstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAgAACAQAbmFtZR0AbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmUECQBuYW1lX2hhc2jT9fHCl6vWQQMKAG5ldHdvcmtfaWS6FwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:polished_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AgAACAQAbmFtZRwAbWluZWNyYWZ0OnBvbGlzaGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaHC1edoaWF3uAwoAbmV0d29ya19pZJY0AAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:sand", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWRQGwAACgYAc3RhdGVzCAkAc2FuZF90eXBlBgBub3JtYWwAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:sand", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNhbmQECQBuYW1lX2hhc2i6lthXXbAyWAMKAG5ldHdvcmtfaWRRGwAACgYAc3RhdGVzCAkAc2FuZF90eXBlAwByZWQAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cactus", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAAAACAQAbmFtZRAAbWluZWNyYWZ0OmNhY3R1cwQJAG5hbWVfaGFzaCG9zL0N4wvGAwoAbmV0d29ya19pZKsvAAAKBgBzdGF0ZXMDAwBhZ2UAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAAAACAQAbmFtZREAbWluZWNyYWZ0Om9ha19sb2cECQBuYW1lX2hhc2ho6TS+K7PZFQMKAG5ldHdvcmtfaWTbAgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stripped_oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQJAQAACAQAbmFtZRoAbWluZWNyYWZ0OnN0cmlwcGVkX29ha19sb2cECQBuYW1lX2hhc2h8dqh+OOHU4wMKAG5ldHdvcmtfaWS3MwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:spruce_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ4AwAACAQAbmFtZRQAbWluZWNyYWZ0OnNwcnVjZV9sb2cECQBuYW1lX2hhc2hZ03qaLoF3WgMKAG5ldHdvcmtfaWSbGwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stripped_spruce_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX3NwcnVjZV9sb2cECQBuYW1lX2hhc2iNrhKjS5IyrgMKAG5ldHdvcmtfaWSnLAAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:birch_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ5AwAACAQAbmFtZRMAbWluZWNyYWZ0OmJpcmNoX2xvZwQJAG5hbWVfaGFzaBUzT3NxsZAnAwoAbmV0d29ya19pZPUGAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stripped_birch_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAQAACAQAbmFtZRwAbWluZWNyYWZ0OnN0cmlwcGVkX2JpcmNoX2xvZwQJAG5hbWVfaGFzaCFKS4AeuSidAwoAbmV0d29ya19pZNYpAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:jungle_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AwAACAQAbmFtZRQAbWluZWNyYWZ0Omp1bmdsZV9sb2cECQBuYW1lX2hhc2gkwW0KNulqDgMKAG5ldHdvcmtfaWR/AgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stripped_jungle_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2p1bmdsZV9sb2cECQBuYW1lX2hhc2hAwMsgOk02JAMKAG5ldHdvcmtfaWTnBgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:acacia_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAAAACAQAbmFtZRQAbWluZWNyYWZ0OmFjYWNpYV9sb2cECQBuYW1lX2hhc2iV48VpYhjoYQMKAG5ldHdvcmtfaWQEHAAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stripped_acacia_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAQAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2FjYWNpYV9sb2cECQBuYW1lX2hhc2hJb0lQqnEqlgMKAG5ldHdvcmtfaWRoJwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:dark_oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ7AwAACAQAbmFtZRYAbWluZWNyYWZ0OmRhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaIWfVRd0XUo3AwoAbmV0d29ya19pZCsTAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stripped_dark_oak_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQIAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2Rhcmtfb2FrX2xvZwQJAG5hbWVfaGFzaPFTdxRdPwkOAwoAbmV0d29ya19pZHsCAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:mangrove_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAgAACAQAbmFtZRYAbWluZWNyYWZ0Om1hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaHZe6DzPZBobAwoAbmV0d29ya19pZEcEAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stripped_mangrove_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAgAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX2xvZwQJAG5hbWVfaGFzaLqIBo4hwA//AwoAbmV0d29ya19pZBA3AAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cherry_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAwAACAQAbmFtZRQAbWluZWNyYWZ0OmNoZXJyeV9sb2cECQBuYW1lX2hhc2hwFlaioppB1wMKAG5ldHdvcmtfaWSOMgAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stripped_cherry_log", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQWAwAACAQAbmFtZR0AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV9sb2cECQBuYW1lX2hhc2i85H6G+WhXaAMKAG5ldHdvcmtfaWR0HAAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:crimson_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTgAQAACAQAbmFtZRYAbWluZWNyYWZ0OmNyaW1zb25fc3RlbQQJAG5hbWVfaGFzaM0FzfL0UTKZAwoAbmV0d29ya19pZDopAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stripped_crimson_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTvAQAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25fc3RlbQQJAG5hbWVfaGFzaDlA6nood57EAwoAbmV0d29ya19pZIQvAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:warped_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAQAACAQAbmFtZRUAbWluZWNyYWZ0OndhcnBlZF9zdGVtBAkAbmFtZV9oYXNon7cKfPZxdrUDCgBuZXR3b3JrX2lkoi0AAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stripped_warped_stem", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAQAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9zdGVtBAkAbmFtZV9oYXNoEw+y0dDPSd8DCgBuZXR3b3JrX2lkIjMAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQuEwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlAwBvYWsAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQ0EwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlAwBvYWsAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQvEwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBzcHJ1Y2UAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQ1EwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBzcHJ1Y2UAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQwEwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBQBiaXJjaAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQ2EwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBQBiaXJjaAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQxEwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBqdW5nbGUAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQ3EwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBqdW5nbGUAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQyEwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlBgBhY2FjaWEAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQ4EwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlBgBhY2FjaWEAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQzEwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQACAkAd29vZF90eXBlCABkYXJrX29hawADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAQAACAQAbmFtZQ4AbWluZWNyYWZ0Ondvb2QECQBuYW1lX2hhc2gbHdJFXQ1vNwMKAG5ldHdvcmtfaWQ5EwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQBCAkAd29vZF90eXBlCABkYXJrX29hawADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:mangrove_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAgAACAQAbmFtZRcAbWluZWNyYWZ0Om1hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2iXVxG0JG2fVAMKAG5ldHdvcmtfaWQlGwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkBDABzdHJpcHBlZF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stripped_mangrove_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTxAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX21hbmdyb3ZlX3dvb2QECQBuYW1lX2hhc2h7CkbaBF7/WAMKAG5ldHdvcmtfaWRyGwAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cherry_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAwAACAQAbmFtZRUAbWluZWNyYWZ0OmNoZXJyeV93b29kBAkAbmFtZV9oYXNoAW8srlmpBM8DCgBuZXR3b3JrX2lkWjAAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AQwAc3RyaXBwZWRfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stripped_cherry_wood", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAwAACAQAbmFtZR4AbWluZWNyYWZ0OnN0cmlwcGVkX2NoZXJyeV93b29kBAkAbmFtZV9oYXNo/e7KXv+CB38DCgBuZXR3b3JrX2lktiEAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:crimson_hyphae", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQqAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNouRmKmfSqEWADCgBuZXR3b3JrX2lk2xsAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stripped_crimson_hyphae", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQrAgAACAQAbmFtZSEAbWluZWNyYWZ0OnN0cmlwcGVkX2NyaW1zb25faHlwaGFlBAkAbmFtZV9oYXNoFffwmABq4LUDCgBuZXR3b3JrX2lkpi0AAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:warped_hyphae", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQpAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2hn8plQUr6pmQMKAG5ldHdvcmtfaWRCKQAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:stripped_warped_hyphae", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQsAgAACAQAbmFtZSAAbWluZWNyYWZ0OnN0cmlwcGVkX3dhcnBlZF9oeXBoYWUECQBuYW1lX2hhc2irKq+HYPSgjQMKAG5ldHdvcmtfaWSzJAAACgYAc3RhdGVzCAsAcGlsbGFyX2F4aXMBAHkAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:bamboo_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQOAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJhbWJvb19ibG9jawQJAG5hbWVfaGFzaAbDeur6stIBAwoAbmV0d29ya19pZD8AAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:stripped_bamboo_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAwAACAQAbmFtZR8AbWluZWNyYWZ0OnN0cmlwcGVkX2JhbWJvb19ibG9jawQJAG5hbWVfaGFzaJpwytpZOZM9AwoAbmV0d29ya19pZF4XAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZPUrAAAKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlAwBvYWsBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZPYrAAAKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBgBzcHJ1Y2UBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZPcrAAAKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBQBiaXJjaAEOAHBlcnNpc3RlbnRfYml0AAEKAHVwZGF0ZV9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQSAAAACAQAbmFtZRAAbWluZWNyYWZ0OmxlYXZlcwQJAG5hbWVfaGFzaACPIsusW0mnAwoAbmV0d29ya19pZPgrAAAKBgBzdGF0ZXMIDQBvbGRfbGVhZl90eXBlBgBqdW5nbGUBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:leaves2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAAAACAQAbmFtZREAbWluZWNyYWZ0OmxlYXZlczIECQBuYW1lX2hhc2gy/bgrncY1ZAMKAG5ldHdvcmtfaWQdHAAACgYAc3RhdGVzCA0AbmV3X2xlYWZfdHlwZQYAYWNhY2lhAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:leaves2", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAAAACAQAbmFtZREAbWluZWNyYWZ0OmxlYXZlczIECQBuYW1lX2hhc2gy/bgrncY1ZAMKAG5ldHdvcmtfaWQeHAAACgYAc3RhdGVzCA0AbmV3X2xlYWZfdHlwZQgAZGFya19vYWsBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:mangrove_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2xlYXZlcwQJAG5hbWVfaGFzaKyI/dWvhEG8AwoAbmV0d29ya19pZGUuAAAKBgBzdGF0ZXMBDgBwZXJzaXN0ZW50X2JpdAABCgB1cGRhdGVfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cherry_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQjAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9sZWF2ZXMECQBuYW1lX2hhc2giTs9ChhYBlQMKAG5ldHdvcmtfaWQ2JwAACgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:azalea_leaves", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAgAACAQAbmFtZRcAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXMECQBuYW1lX2hhc2iXFhD57wFS7AMKAG5ldHdvcmtfaWRiNAAACgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:azalea_leaves_flowered", + "block_state_b64": "CgAAAwgAYmxvY2tfaWREAgAACAQAbmFtZSAAbWluZWNyYWZ0OmF6YWxlYV9sZWF2ZXNfZmxvd2VyZWQECQBuYW1lX2hhc2gs8jxlS/pMrwMKAG5ldHdvcmtfaWTeLAAACgYAc3RhdGVzAQ4AcGVyc2lzdGVudF9iaXQAAQoAdXBkYXRlX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWRjCAAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUDAG9hawADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWRkCAAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAHNwcnVjZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWRlCAAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUFAGJpcmNoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWRmCAAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAGp1bmdsZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWRnCAAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUGAGFjYWNpYQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAAAACAQAbmFtZREAbWluZWNyYWZ0OnNhcGxpbmcECQBuYW1lX2hhc2goZxi1oICLKwMKAG5ldHdvcmtfaWRoCAAACgYAc3RhdGVzAQcAYWdlX2JpdAAIDABzYXBsaW5nX3R5cGUIAGRhcmtfb2FrAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:mangrove_propagule", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAgAACAQAbmFtZRwAbWluZWNyYWZ0Om1hbmdyb3ZlX3Byb3BhZ3VsZQQJAG5hbWVfaGFzaJGeox6hkfLFAwoAbmV0d29ya19pZKEvAAAKBgBzdGF0ZXMBBwBoYW5naW5nAAMPAHByb3BhZ3VsZV9zdGFnZQAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cherry_sapling", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQiAwAACAQAbmFtZRgAbWluZWNyYWZ0OmNoZXJyeV9zYXBsaW5nBAkAbmFtZV9oYXNoGrPpNMf1LtcDCgBuZXR3b3JrX2lkjDIAAAoGAHN0YXRlcwEHAGFnZV9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:bee_nest", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTZAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJlZV9uZXN0BAkAbmFtZV9oYXNo2R2WBxUHEZIDCgBuZXR3b3JrX2lkZCUAAAoGAHN0YXRlcwMJAGRpcmVjdGlvbgAAAAADCwBob25leV9sZXZlbAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wheat_seeds" + }, + { + "id": "minecraft:pumpkin_seeds" + }, + { + "id": "minecraft:melon_seeds" + }, + { + "id": "minecraft:beetroot_seeds" + }, + { + "id": "minecraft:torchflower_seeds" + }, + { + "id": "minecraft:pitcher_pod" + }, + { + "id": "minecraft:wheat" + }, + { + "id": "minecraft:beetroot" + }, + { + "id": "minecraft:potato" + }, + { + "id": "minecraft:poisonous_potato" + }, + { + "id": "minecraft:carrot" + }, + { + "id": "minecraft:golden_carrot" + }, + { + "id": "minecraft:apple" + }, + { + "id": "minecraft:golden_apple" + }, + { + "id": "minecraft:enchanted_golden_apple" + }, + { + "id": "minecraft:melon_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1lbG9uX2Jsb2NrBAkAbmFtZV9oYXNoXxSm0iYpAx8DCgBuZXR3b3JrX2lkeAQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:melon_slice" + }, + { + "id": "minecraft:glistering_melon_slice" + }, + { + "id": "minecraft:sweet_berries" + }, + { + "id": "minecraft:glow_berries" + }, + { + "id": "minecraft:pumpkin", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRWAAAACAQAbmFtZREAbWluZWNyYWZ0OnB1bXBraW4ECQBuYW1lX2hhc2gc8A3jaSzWbgMKAG5ldHdvcmtfaWQNHQAACgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:carved_pumpkin", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNhcnZlZF9wdW1wa2luBAkAbmFtZV9oYXNoPu1T0MJuG90DCgBuZXR3b3JrX2lkDDMAAAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:lit_pumpkin", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmxpdF9wdW1wa2luBAkAbmFtZV9oYXNo7gWtEm2uPL0DCgBuZXR3b3JrX2lkbC4AAAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:honeycomb" + }, + { + "id": "minecraft:tallgrass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZFUJAAAKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAGZlcm4AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZBYkAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAZmVybgEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:tallgrass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQfAAAACAQAbmFtZRMAbWluZWNyYWZ0OnRhbGxncmFzcwQJAG5hbWVfaGFzaC3PXpAXXYswAwoAbmV0d29ya19pZFQJAAAKBgBzdGF0ZXMIDwB0YWxsX2dyYXNzX3R5cGUEAHRhbGwAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZBUkAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQUAZ3Jhc3MBDwB1cHBlcl9ibG9ja19iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:nether_sprouts" + }, + { + "id": "minecraft:fire_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAwAACAQAbmFtZRQAbWluZWNyYWZ0OmZpcmVfY29yYWwECQBuYW1lX2hhc2hOHyyECVQVJwMKAG5ldHdvcmtfaWTzBgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:brain_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWREAwAACAQAbmFtZRUAbWluZWNyYWZ0OmJyYWluX2NvcmFsBAkAbmFtZV9oYXNoRiWlLCwA2ycDCgBuZXR3b3JrX2lkmwcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:bubble_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAwAACAQAbmFtZRYAbWluZWNyYWZ0OmJ1YmJsZV9jb3JhbAQJAG5hbWVfaGFzaJz6rWnl+v2qAwoAbmV0d29ya19pZGcsAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:tube_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1YmVfY29yYWwECQBuYW1lX2hhc2iYa8oO/tgk7wMKAG5ldHdvcmtfaWShNAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:horn_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAwAACAQAbmFtZRQAbWluZWNyYWZ0Omhvcm5fY29yYWwECQBuYW1lX2hhc2iZnRHjZbnLPgMKAG5ldHdvcmtfaWR0FwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:dead_fire_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfZmlyZV9jb3JhbAQJAG5hbWVfaGFzaEPU6tFy/latAwoAbmV0d29ya19pZJ4sAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:dead_brain_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAwAACAQAbmFtZRoAbWluZWNyYWZ0OmRlYWRfYnJhaW5fY29yYWwECQBuYW1lX2hhc2j5L6QJCISvzwMKAG5ldHdvcmtfaWQzMgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:dead_bubble_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAwAACAQAbmFtZRsAbWluZWNyYWZ0OmRlYWRfYnViYmxlX2NvcmFsBAkAbmFtZV9oYXNoSTOZ/8wpeNYDCgBuZXR3b3JrX2lkizIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:dead_tube_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfdHViZV9jb3JhbAQJAG5hbWVfaGFzaJGjNWhlaIJeAwoAbmV0d29ya19pZLkbAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:dead_horn_coral", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAwAACAQAbmFtZRkAbWluZWNyYWZ0OmRlYWRfaG9ybl9jb3JhbAQJAG5hbWVfaGFzaJBkz3qt+g2cAwoAbmV0d29ya19pZHopAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZEkdAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgMAcmVkAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZEcdAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgQAcGluawMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZEgdAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgYAcHVycGxlAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZEYdAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgQAYmx1ZQMTAGNvcmFsX2Zhbl9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:coral_fan", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSEAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvcmFsX2ZhbgQJAG5hbWVfaGFzaAFROjbTm8JzAwoAbmV0d29ya19pZEodAAAKBgBzdGF0ZXMICwBjb3JhbF9jb2xvcgYAeWVsbG93AxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkTAAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkSgAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkSwAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkSQAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAxMAY29yYWxfZmFuX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_fan_dead", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSFAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNvcmFsX2Zhbl9kZWFkBAkAbmFtZV9oYXNo3kgokLV4uQIDCgBuZXR3b3JrX2lkTQAAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cDEwBjb3JhbF9mYW5fZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:crimson_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTeAQAACAQAbmFtZRcAbWluZWNyYWZ0OmNyaW1zb25fcm9vdHMECQBuYW1lX2hhc2j1fWgQLViv5QMKAG5ldHdvcmtfaWTYMwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:warped_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTfAQAACAQAbmFtZRYAbWluZWNyYWZ0OndhcnBlZF9yb290cwQJAG5hbWVfaGFzaBc3WvbJOLlkAwoAbmV0d29ya19pZCgcAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:yellow_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQlAAAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19mbG93ZXIECQBuYW1lX2hhc2jWbU1pF0OUGAMKAG5ldHdvcmtfaWQVBAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR3FwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUFAHBvcHB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR4FwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUGAG9yY2hpZAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR5FwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUGAGFsbGl1bQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR6FwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUJAGhvdXN0b25pYQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR7FwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUJAHR1bGlwX3JlZAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR8FwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUMAHR1bGlwX29yYW5nZQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR9FwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGULAHR1bGlwX3doaXRlAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR+FwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUKAHR1bGlwX3BpbmsAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWR/FwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUFAG94ZXllAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWSAFwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUKAGNvcm5mbG93ZXIAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:red_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAAAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9mbG93ZXIECQBuYW1lX2hhc2ixeWoRT8FNPwMKAG5ldHdvcmtfaWSBFwAACgYAc3RhdGVzCAsAZmxvd2VyX3R5cGUSAGxpbHlfb2ZfdGhlX3ZhbGxleQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZBMkAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQkAc3VuZmxvd2VyAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZBQkAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAc3lyaW5nYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZBckAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQQAcm9zZQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:double_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSvAAAACAQAbmFtZRYAbWluZWNyYWZ0OmRvdWJsZV9wbGFudAQJAG5hbWVfaGFzaHVcUQvyXwGKAwoAbmV0d29ya19pZBgkAAAKBgBzdGF0ZXMIEQBkb3VibGVfcGxhbnRfdHlwZQcAcGFlb25pYQEPAHVwcGVyX2Jsb2NrX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:pitcher_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAwAACAQAbmFtZRcAbWluZWNyYWZ0OnBpdGNoZXJfcGxhbnQECQBuYW1lX2hhc2hRJHzsbDH+SQMKAG5ldHdvcmtfaWQPGAAACgYAc3RhdGVzAQ8AdXBwZXJfYmxvY2tfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:pink_petals", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQkAwAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfcGV0YWxzBAkAbmFtZV9oYXNo6DQwN9SwV3QDCgBuZXR3b3JrX2lkbh0AAAoGAHN0YXRlcwMGAGdyb3d0aAAAAAAIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:wither_rose", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTXAQAACAQAbmFtZRUAbWluZWNyYWZ0OndpdGhlcl9yb3NlBAkAbmFtZV9oYXNoaSKxl3I516gDCgBuZXR3b3JrX2lkQSwAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:torchflower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AwAACAQAbmFtZRUAbWluZWNyYWZ0OnRvcmNoZmxvd2VyBAkAbmFtZV9oYXNoL+mHtElwbqQDCgBuZXR3b3JrX2lkxisAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:white_dye" + }, + { + "id": "minecraft:light_gray_dye" + }, + { + "id": "minecraft:gray_dye" + }, + { + "id": "minecraft:black_dye" + }, + { + "id": "minecraft:brown_dye" + }, + { + "id": "minecraft:red_dye" + }, + { + "id": "minecraft:orange_dye" + }, + { + "id": "minecraft:yellow_dye" + }, + { + "id": "minecraft:lime_dye" + }, + { + "id": "minecraft:green_dye" + }, + { + "id": "minecraft:cyan_dye" + }, + { + "id": "minecraft:light_blue_dye" + }, + { + "id": "minecraft:blue_dye" + }, + { + "id": "minecraft:purple_dye" + }, + { + "id": "minecraft:magenta_dye" + }, + { + "id": "minecraft:pink_dye" + }, + { + "id": "minecraft:ink_sac" + }, + { + "id": "minecraft:glow_ink_sac" + }, + { + "id": "minecraft:cocoa_beans" + }, + { + "id": "minecraft:lapis_lazuli" + }, + { + "id": "minecraft:bone_meal" + }, + { + "id": "minecraft:vine", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnZpbmUECQBuYW1lX2hhc2j0Sj8/XeXOLAMKAG5ldHdvcmtfaWQhCQAACgYAc3RhdGVzAxMAdmluZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:weeping_vines", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAQAACAQAbmFtZRcAbWluZWNyYWZ0OndlZXBpbmdfdmluZXMECQBuYW1lX2hhc2jrLgLHkQygiwMKAG5ldHdvcmtfaWRPJAAACgYAc3RhdGVzAxEAd2VlcGluZ192aW5lc19hZ2UAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:twisting_vines", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAgAACAQAbmFtZRgAbWluZWNyYWZ0OnR3aXN0aW5nX3ZpbmVzBAkAbmFtZV9oYXNoDYR5QgVUQJADCgBuZXR3b3JrX2lkIiUAAAoGAHN0YXRlcwMSAHR3aXN0aW5nX3ZpbmVzX2FnZQAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:waterlily", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAAAACAQAbmFtZRMAbWluZWNyYWZ0OndhdGVybGlseQQJAG5hbWVfaGFzaEHgC4c1SXg0AwoAbmV0d29ya19pZCIKAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:seagrass", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSBAQAACAQAbmFtZRIAbWluZWNyYWZ0OnNlYWdyYXNzBAkAbmFtZV9oYXNoHSBFtoHdWxIDCgBuZXR3b3JrX2lkogIAAAoGAHN0YXRlcwgOAHNlYV9ncmFzc190eXBlBwBkZWZhdWx0AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:kelp" + }, + { + "id": "minecraft:deadbush", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAAAACAQAbmFtZRIAbWluZWNyYWZ0OmRlYWRidXNoBAkAbmFtZV9oYXNoPFODe4IScnYDCgBuZXR3b3JrX2lkMh8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:bamboo", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhbWJvbwQJAG5hbWVfaGFzaBgpGmyzhedCAwoAbmV0d29ya19pZLwXAAAKBgBzdGF0ZXMBBwBhZ2VfYml0AAgQAGJhbWJvb19sZWFmX3NpemUJAG5vX2xlYXZlcwgWAGJhbWJvb19zdGFsa190aGlja25lc3MEAHRoaW4AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:snow", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnNub3cECQBuYW1lX2hhc2gVHr5XXdETWAMKAG5ldHdvcmtfaWRPGwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:ice", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAAAACAQAbmFtZQ0AbWluZWNyYWZ0OmljZQQJAG5hbWVfaGFzaNF26f+uUT29AwoAbmV0d29ya19pZHAuAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:packed_ice", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSuAAAACAQAbmFtZRQAbWluZWNyYWZ0OnBhY2tlZF9pY2UECQBuYW1lX2hhc2hk4bu123ZrFgMKAG5ldHdvcmtfaWThAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:blue_ice", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQKAQAACAQAbmFtZRIAbWluZWNyYWZ0OmJsdWVfaWNlBAkAbmFtZV9oYXNo+EKxYgFhKcgDCgBuZXR3b3JrX2lk2C8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:snow_layer", + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAAAACAQAbmFtZRQAbWluZWNyYWZ0OnNub3dfbGF5ZXIECQBuYW1lX2hhc2hXka6atMYUCQMKAG5ldHdvcmtfaWQ9AgAACgYAc3RhdGVzAQsAY292ZXJlZF9iaXQAAwYAaGVpZ2h0AAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:pointed_dripstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQzAgAACAQAbmFtZRsAbWluZWNyYWZ0OnBvaW50ZWRfZHJpcHN0b25lBAkAbmFtZV9oYXNoJMISzmHQgt8DCgBuZXR3b3JrX2lkMjMAAAoGAHN0YXRlcwgTAGRyaXBzdG9uZV90aGlja25lc3MDAHRpcAEHAGhhbmdpbmcBAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:dripstone_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRyaXBzdG9uZV9ibG9jawQJAG5hbWVfaGFzaIIXnEqY77YsAwoAbmV0d29ya19pZCAJAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:moss_carpet", + "block_state_b64": "CgAAAwgAYmxvY2tfaWROAgAACAQAbmFtZRUAbWluZWNyYWZ0Om1vc3NfY2FycGV0BAkAbmFtZV9oYXNo/NEDxRPTshYDCgBuZXR3b3JrX2lk5QIAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:moss_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ/AgAACAQAbmFtZRQAbWluZWNyYWZ0Om1vc3NfYmxvY2sECQBuYW1lX2hhc2iovcsPUYX2tgMKAG5ldHdvcmtfaWTgLQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:dirt_with_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AgAACAQAbmFtZRkAbWluZWNyYWZ0OmRpcnRfd2l0aF9yb290cwQJAG5hbWVfaGFzaLCNDYPviDCIAwoAbmV0d29ya19pZNsjAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:hanging_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ+AgAACAQAbmFtZRcAbWluZWNyYWZ0Omhhbmdpbmdfcm9vdHMECQBuYW1lX2hhc2jaXn+Y5UZpDAMKAG5ldHdvcmtfaWRwAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:mangrove_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWThAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNoa786PzQGZ6kDCgBuZXR3b3JrX2lkSywAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:muddy_mangrove_roots", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTiAgAACAQAbmFtZR4AbWluZWNyYWZ0Om11ZGR5X21hbmdyb3ZlX3Jvb3RzBAkAbmFtZV9oYXNo9YApdHpo1RkDCgBuZXR3b3JrX2lkQgQAAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:big_dripleaf", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJpZ19kcmlwbGVhZgQJAG5hbWVfaGFzaGBEhXjo6qSdAwoAbmV0d29ya19pZN4pAAAKBgBzdGF0ZXMBEQBiaWdfZHJpcGxlYWZfaGVhZAEIEQBiaWdfZHJpcGxlYWZfdGlsdAQAbm9uZQgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:small_dripleaf_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRPAgAACAQAbmFtZR4AbWluZWNyYWZ0OnNtYWxsX2RyaXBsZWFmX2Jsb2NrBAkAbmFtZV9oYXNojxRAgXP9uWADCgBuZXR3b3JrX2lk9RsAAAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24EAGVhc3QBDwB1cHBlcl9ibG9ja19iaXQBAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:spore_blossom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRAAgAACAQAbmFtZRcAbWluZWNyYWZ0OnNwb3JlX2Jsb3Nzb20ECQBuYW1lX2hhc2il3U72Gbco2gMKAG5ldHdvcmtfaWTNMgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:azalea", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRQAgAACAQAbmFtZRAAbWluZWNyYWZ0OmF6YWxlYQQJAG5hbWVfaGFzaNyUl+BW9JrBAwoAbmV0d29ya19pZEAvAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:flowering_azalea", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRRAgAACAQAbmFtZRoAbWluZWNyYWZ0OmZsb3dlcmluZ19hemFsZWEECQBuYW1lX2hhc2ie9r33wz8kiwMKAG5ldHdvcmtfaWRMJAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:glow_lichen", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSaAgAACAQAbmFtZRUAbWluZWNyYWZ0Omdsb3dfbGljaGVuBAkAbmFtZV9oYXNobyPUrIYlo44DCgBuZXR3b3JrX2lkGyUAAAoGAHN0YXRlcwMZAG11bHRpX2ZhY2VfZGlyZWN0aW9uX2JpdHM/AAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:amethyst_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAgAACAQAbmFtZRgAbWluZWNyYWZ0OmFtZXRoeXN0X2Jsb2NrBAkAbmFtZV9oYXNob+JK1iiAthcDCgBuZXR3b3JrX2lkCQMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:budding_amethyst", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRHAgAACAQAbmFtZRoAbWluZWNyYWZ0OmJ1ZGRpbmdfYW1ldGh5c3QECQBuYW1lX2hhc2gJvAwfI14fxgMKAG5ldHdvcmtfaWS7LwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:amethyst_cluster", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAgAACAQAbmFtZRoAbWluZWNyYWZ0OmFtZXRoeXN0X2NsdXN0ZXIECQBuYW1lX2hhc2jK82S88Jgm8wMKAG5ldHdvcmtfaWQgNQAACgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:large_amethyst_bud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRJAgAACAQAbmFtZRwAbWluZWNyYWZ0OmxhcmdlX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaAHhdpWD+sd5AwoAbmV0d29ya19pZGUfAAAKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:medium_amethyst_bud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRKAgAACAQAbmFtZR0AbWluZWNyYWZ0Om1lZGl1bV9hbWV0aHlzdF9idWQECQBuYW1lX2hhc2g5lBGtC0DzZQMKAG5ldHdvcmtfaWQ1HAAACgYAc3RhdGVzCBQAbWluZWNyYWZ0OmJsb2NrX2ZhY2UCAHVwAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:small_amethyst_bud", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRLAgAACAQAbmFtZRwAbWluZWNyYWZ0OnNtYWxsX2FtZXRoeXN0X2J1ZAQJAG5hbWVfaGFzaEnb4+q9PO4YAwoAbmV0d29ya19pZBkEAAAKBgBzdGF0ZXMIFABtaW5lY3JhZnQ6YmxvY2tfZmFjZQIAdXAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:tuff", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAgAACAQAbmFtZQ4AbWluZWNyYWZ0OnR1ZmYECQBuYW1lX2hhc2h1Rwc1XYsBGwMKAG5ldHdvcmtfaWRGBAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:calcite", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAgAACAQAbmFtZREAbWluZWNyYWZ0OmNhbGNpdGUECQBuYW1lX2hhc2ixKLu8ZIdzDQMKAG5ldHdvcmtfaWR6AgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:chicken" + }, + { + "id": "minecraft:porkchop" + }, + { + "id": "minecraft:beef" + }, + { + "id": "minecraft:mutton" + }, + { + "id": "minecraft:rabbit" + }, + { + "id": "minecraft:cod" + }, + { + "id": "minecraft:salmon" + }, + { + "id": "minecraft:tropical_fish" + }, + { + "id": "minecraft:pufferfish" + }, + { + "id": "minecraft:brown_mushroom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAAAACAQAbmFtZRgAbWluZWNyYWZ0OmJyb3duX211c2hyb29tBAkAbmFtZV9oYXNonYw/FO78WDoDCgBuZXR3b3JrX2lkGRcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_mushroom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQoAAAACAQAbmFtZRYAbWluZWNyYWZ0OnJlZF9tdXNocm9vbQQJAG5hbWVfaGFzaPpzJua7669xAwoAbmV0d29ya19pZCgdAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:crimson_fungus", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTjAQAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fZnVuZ3VzBAkAbmFtZV9oYXNolIcCUuFM2u0DCgBuZXR3b3JrX2lklDQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:warped_fungus", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTkAQAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9mdW5ndXMECQBuYW1lX2hhc2gq8bSnRVTAFgMKAG5ldHdvcmtfaWTmAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:brown_mushroom_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lk/zIAAAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw4AAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:red_mushroom_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAAAACAQAbmFtZRwAbWluZWNyYWZ0OnJlZF9tdXNocm9vbV9ibG9jawQJAG5hbWVfaGFzaJTTyJbth9M9AwoAbmV0d29ya19pZG8XAAAKBgBzdGF0ZXMDEgBodWdlX211c2hyb29tX2JpdHMOAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:brown_mushroom_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lkADMAAAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cw8AAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:brown_mushroom_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRjAAAACAQAbmFtZR4AbWluZWNyYWZ0OmJyb3duX211c2hyb29tX2Jsb2NrBAkAbmFtZV9oYXNoIyjnbI6xy9sDCgBuZXR3b3JrX2lk8TIAAAoGAHN0YXRlcwMSAGh1Z2VfbXVzaHJvb21fYml0cwAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:egg" + }, + { + "id": "minecraft:sugar_cane" + }, + { + "id": "minecraft:sugar" + }, + { + "id": "minecraft:rotten_flesh" + }, + { + "id": "minecraft:bone" + }, + { + "id": "minecraft:web", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQeAAAACAQAbmFtZQ0AbWluZWNyYWZ0OndlYgQJAG5hbWVfaGFzaA4GKQCvG4i9AwoAbmV0d29ya19pZIkuAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:spider_eye" + }, + { + "id": "minecraft:mob_spawner", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ0AAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vYl9zcGF3bmVyBAkAbmFtZV9oYXNoNwGrCV/Fkh8DCgBuZXR3b3JrX2lkggQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkEhsAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUFAHN0b25lAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkExsAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAGNvYmJsZXN0b25lAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkFBsAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGULAHN0b25lX2JyaWNrAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkFRsAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGURAG1vc3N5X3N0b25lX2JyaWNrAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkFhsAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUTAGNyYWNrZWRfc3RvbmVfYnJpY2sAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:monster_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRhAAAACAQAbmFtZRUAbWluZWNyYWZ0Om1vbnN0ZXJfZWdnBAkAbmFtZV9oYXNoFMxMALksxVEDCgBuZXR3b3JrX2lkFxsAAAoGAHN0YXRlcwgWAG1vbnN0ZXJfZWdnX3N0b25lX3R5cGUUAGNoaXNlbGVkX3N0b25lX2JyaWNrAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:infested_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAgAACAQAbmFtZRwAbWluZWNyYWZ0OmluZmVzdGVkX2RlZXBzbGF0ZQQJAG5hbWVfaGFzaICF2VYccxF1AwoAbmV0d29ya19pZA4fAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:dragon_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR6AAAACAQAbmFtZRQAbWluZWNyYWZ0OmRyYWdvbl9lZ2cECQBuYW1lX2hhc2inMzXrV+/e1wMKAG5ldHdvcmtfaWSjMgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:turtle_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAQAACAQAbmFtZRQAbWluZWNyYWZ0OnR1cnRsZV9lZ2cECQBuYW1lX2hhc2iwSRcxOJIJ9gMKAG5ldHdvcmtfaWTfNQAACgYAc3RhdGVzCA0AY3JhY2tlZF9zdGF0ZQkAbm9fY3JhY2tzCBAAdHVydGxlX2VnZ19jb3VudAcAb25lX2VnZwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sniffer_egg", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRTAwAACAQAbmFtZRUAbWluZWNyYWZ0OnNuaWZmZXJfZWdnBAkAbmFtZV9oYXNoY1lozc8lPcYDCgBuZXR3b3JrX2lkvC8AAAoGAHN0YXRlcwgNAGNyYWNrZWRfc3RhdGUJAG5vX2NyYWNrcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:frog_spawn", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTTAgAACAQAbmFtZRQAbWluZWNyYWZ0OmZyb2dfc3Bhd24ECQBuYW1lX2hhc2iWmd7idp3ZZwMKAG5ldHdvcmtfaWRSHAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:pearlescent_froglight", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAgAACAQAbmFtZR8AbWluZWNyYWZ0OnBlYXJsZXNjZW50X2Zyb2dsaWdodAQJAG5hbWVfaGFzaKkcFRyycYGyAwoAbmV0d29ya19pZGEtAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:verdant_froglight", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAgAACAQAbmFtZRsAbWluZWNyYWZ0OnZlcmRhbnRfZnJvZ2xpZ2h0BAkAbmFtZV9oYXNoA+eXuTBohrQDCgBuZXR3b3JrX2lknC0AAAoGAHN0YXRlcwgLAHBpbGxhcl9heGlzAQB5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:ochre_froglight", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTWAgAACAQAbmFtZRkAbWluZWNyYWZ0Om9jaHJlX2Zyb2dsaWdodAQJAG5hbWVfaGFzaMY59kjPe+c3AwoAbmV0d29ya19pZNIUAAAKBgBzdGF0ZXMICwBwaWxsYXJfYXhpcwEAeQADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:chicken_spawn_egg" + }, + { + "id": "minecraft:bee_spawn_egg" + }, + { + "id": "minecraft:cow_spawn_egg" + }, + { + "id": "minecraft:pig_spawn_egg" + }, + { + "id": "minecraft:sheep_spawn_egg" + }, + { + "id": "minecraft:wolf_spawn_egg" + }, + { + "id": "minecraft:polar_bear_spawn_egg" + }, + { + "id": "minecraft:ocelot_spawn_egg" + }, + { + "id": "minecraft:cat_spawn_egg" + }, + { + "id": "minecraft:mooshroom_spawn_egg" + }, + { + "id": "minecraft:bat_spawn_egg" + }, + { + "id": "minecraft:parrot_spawn_egg" + }, + { + "id": "minecraft:rabbit_spawn_egg" + }, + { + "id": "minecraft:llama_spawn_egg" + }, + { + "id": "minecraft:horse_spawn_egg" + }, + { + "id": "minecraft:donkey_spawn_egg" + }, + { + "id": "minecraft:mule_spawn_egg" + }, + { + "id": "minecraft:skeleton_horse_spawn_egg" + }, + { + "id": "minecraft:zombie_horse_spawn_egg" + }, + { + "id": "minecraft:tropical_fish_spawn_egg" + }, + { + "id": "minecraft:cod_spawn_egg" + }, + { + "id": "minecraft:pufferfish_spawn_egg" + }, + { + "id": "minecraft:salmon_spawn_egg" + }, + { + "id": "minecraft:dolphin_spawn_egg" + }, + { + "id": "minecraft:turtle_spawn_egg" + }, + { + "id": "minecraft:panda_spawn_egg" + }, + { + "id": "minecraft:fox_spawn_egg" + }, + { + "id": "minecraft:creeper_spawn_egg" + }, + { + "id": "minecraft:enderman_spawn_egg" + }, + { + "id": "minecraft:silverfish_spawn_egg" + }, + { + "id": "minecraft:skeleton_spawn_egg" + }, + { + "id": "minecraft:wither_skeleton_spawn_egg" + }, + { + "id": "minecraft:stray_spawn_egg" + }, + { + "id": "minecraft:slime_spawn_egg" + }, + { + "id": "minecraft:spider_spawn_egg" + }, + { + "id": "minecraft:zombie_spawn_egg" + }, + { + "id": "minecraft:zombie_pigman_spawn_egg" + }, + { + "id": "minecraft:husk_spawn_egg" + }, + { + "id": "minecraft:drowned_spawn_egg" + }, + { + "id": "minecraft:squid_spawn_egg" + }, + { + "id": "minecraft:glow_squid_spawn_egg" + }, + { + "id": "minecraft:cave_spider_spawn_egg" + }, + { + "id": "minecraft:witch_spawn_egg" + }, + { + "id": "minecraft:guardian_spawn_egg" + }, + { + "id": "minecraft:elder_guardian_spawn_egg" + }, + { + "id": "minecraft:endermite_spawn_egg" + }, + { + "id": "minecraft:magma_cube_spawn_egg" + }, + { + "id": "minecraft:strider_spawn_egg" + }, + { + "id": "minecraft:hoglin_spawn_egg" + }, + { + "id": "minecraft:piglin_spawn_egg" + }, + { + "id": "minecraft:zoglin_spawn_egg" + }, + { + "id": "minecraft:piglin_brute_spawn_egg" + }, + { + "id": "minecraft:goat_spawn_egg" + }, + { + "id": "minecraft:axolotl_spawn_egg" + }, + { + "id": "minecraft:warden_spawn_egg" + }, + { + "id": "minecraft:allay_spawn_egg" + }, + { + "id": "minecraft:frog_spawn_egg" + }, + { + "id": "minecraft:tadpole_spawn_egg" + }, + { + "id": "minecraft:trader_llama_spawn_egg" + }, + { + "id": "minecraft:camel_spawn_egg" + }, + { + "id": "minecraft:ghast_spawn_egg" + }, + { + "id": "minecraft:blaze_spawn_egg" + }, + { + "id": "minecraft:shulker_spawn_egg" + }, + { + "id": "minecraft:vindicator_spawn_egg" + }, + { + "id": "minecraft:evoker_spawn_egg" + }, + { + "id": "minecraft:vex_spawn_egg" + }, + { + "id": "minecraft:villager_spawn_egg" + }, + { + "id": "minecraft:wandering_trader_spawn_egg" + }, + { + "id": "minecraft:zombie_villager_spawn_egg" + }, + { + "id": "minecraft:phantom_spawn_egg" + }, + { + "id": "minecraft:pillager_spawn_egg" + }, + { + "id": "minecraft:ravager_spawn_egg" + }, + { + "id": "minecraft:iron_golem_spawn_egg" + }, + { + "id": "minecraft:snow_golem_spawn_egg" + }, + { + "id": "minecraft:sniffer_spawn_egg" + }, + { + "id": "minecraft:obsidian", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQxAAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2lkaWFuBAkAbmFtZV9oYXNoiz4qrb8QjyEDCgBuZXR3b3JrX2lknwQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:crying_obsidian", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQgAgAACAQAbmFtZRkAbWluZWNyYWZ0OmNyeWluZ19vYnNpZGlhbgQJAG5hbWVfaGFzaKT0JlA7Z1K+AwoAbmV0d29ya19pZJQuAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:bedrock", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQHAAAACAQAbmFtZREAbWluZWNyYWZ0OmJlZHJvY2sECQBuYW1lX2hhc2hWfFrh4LVtxwMKAG5ldHdvcmtfaWTOLwAACgYAc3RhdGVzAQ4AaW5maW5pYnVybl9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:soul_sand", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRYAAAACAQAbmFtZRMAbWluZWNyYWZ0OnNvdWxfc2FuZAQJAG5hbWVfaGFzaMaf+bccu+KTAwoAbmV0d29ya19pZLIlAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:magma", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTVAAAACAQAbmFtZQ8AbWluZWNyYWZ0Om1hZ21hBAkAbmFtZV9oYXNoqyTjKaIsWfYDCgBuZXR3b3JrX2lk6zUAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:nether_wart" + }, + { + "id": "minecraft:end_stone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR5AAAACAQAbmFtZRMAbWluZWNyYWZ0OmVuZF9zdG9uZQQJAG5hbWVfaGFzaH1J9jA39GJNAwoAbmV0d29ya19pZNkZAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:chorus_flower", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAAAACAQAbmFtZRcAbWluZWNyYWZ0OmNob3J1c19mbG93ZXIECQBuYW1lX2hhc2iMpSodli5uawMKAG5ldHdvcmtfaWTbHAAACgYAc3RhdGVzAwMAYWdlAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:chorus_plant", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTwAAAACAQAbmFtZRYAbWluZWNyYWZ0OmNob3J1c19wbGFudAQJAG5hbWVfaGFzaJhSrmNGKwaMAwoAbmV0d29ya19pZGkkAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:chorus_fruit" + }, + { + "id": "minecraft:popped_chorus_fruit" + }, + { + "id": "minecraft:sponge", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZFkFAAAKBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAZHJ5AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:sponge", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQTAAAACAQAbmFtZRAAbWluZWNyYWZ0OnNwb25nZQQJAG5hbWVfaGFzaLrd2ScYRDMiAwoAbmV0d29ya19pZFoFAAAKBgBzdGF0ZXMICwBzcG9uZ2VfdHlwZQMAd2V0AAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkMyMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkNCMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkNSMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkNiMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkNyMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkOCMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABibHVlAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkOSMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBABwaW5rAQgAZGVhZF9iaXQBAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkOiMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgBwdXJwbGUBCABkZWFkX2JpdAEAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkOyMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yAwByZWQBCABkZWFkX2JpdAEAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:coral_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAQAACAQAbmFtZRUAbWluZWNyYWZ0OmNvcmFsX2Jsb2NrBAkAbmFtZV9oYXNoxTOVIjqYOYIDCgBuZXR3b3JrX2lkPCMAAAoGAHN0YXRlcwgLAGNvcmFsX2NvbG9yBgB5ZWxsb3cBCABkZWFkX2JpdAEAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:sculk", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAgAACAQAbmFtZQ8AbWluZWNyYWZ0OnNjdWxrBAkAbmFtZV9oYXNo2Lq7T5yQF8kDCgBuZXR3b3JrX2lk4y8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sculk_vein", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNjdWxrX3ZlaW4ECQBuYW1lX2hhc2gJUdhVooV4zwMKAG5ldHdvcmtfaWTzMQAACgYAc3RhdGVzAxkAbXVsdGlfZmFjZV9kaXJlY3Rpb25fYml0cwAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:sculk_catalyst", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX2NhdGFseXN0BAkAbmFtZV9oYXNo+gCpbrCHST4DCgBuZXR3b3JrX2lkcRcAAAoGAHN0YXRlcwEFAGJsb29tAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sculk_shrieker", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTMAgAACAQAbmFtZRgAbWluZWNyYWZ0OnNjdWxrX3Nocmlla2VyBAkAbmFtZV9oYXNo5OXtyObniQ4DCgBuZXR3b3JrX2lkgwIAAAoGAHN0YXRlcwEGAGFjdGl2ZQABCgBjYW5fc3VtbW9uAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sculk_sensor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNjdWxrX3NlbnNvcgQJAG5hbWVfaGFzaCkmHreeTgNnAwoAbmV0d29ya19pZEMcAAAKBgBzdGF0ZXMDEgBzY3Vsa19zZW5zb3JfcGhhc2UAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:calibrated_sculk_sensor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRDAwAACAQAbmFtZSEAbWluZWNyYWZ0OmNhbGlicmF0ZWRfc2N1bGtfc2Vuc29yBAkAbmFtZV9oYXNoffAcXXN/iJUDCgBuZXR3b3JrX2lkTCcAAAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAxIAc2N1bGtfc2Vuc29yX3BoYXNlAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:reinforced_deepslate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTRAgAACAQAbmFtZR4AbWluZWNyYWZ0OnJlaW5mb3JjZWRfZGVlcHNsYXRlBAkAbmFtZV9oYXNoldDmj91EapQDCgBuZXR3b3JrX2lkNCcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:leather_helmet" + }, + { + "id": "minecraft:chainmail_helmet" + }, + { + "id": "minecraft:iron_helmet" + }, + { + "id": "minecraft:golden_helmet" + }, + { + "id": "minecraft:diamond_helmet" + }, + { + "id": "minecraft:netherite_helmet" + }, + { + "id": "minecraft:leather_chestplate" + }, + { + "id": "minecraft:chainmail_chestplate" + }, + { + "id": "minecraft:iron_chestplate" + }, + { + "id": "minecraft:golden_chestplate" + }, + { + "id": "minecraft:diamond_chestplate" + }, + { + "id": "minecraft:netherite_chestplate" + }, + { + "id": "minecraft:leather_leggings" + }, + { + "id": "minecraft:chainmail_leggings" + }, + { + "id": "minecraft:iron_leggings" + }, + { + "id": "minecraft:golden_leggings" + }, + { + "id": "minecraft:diamond_leggings" + }, + { + "id": "minecraft:netherite_leggings" + }, + { + "id": "minecraft:leather_boots" + }, + { + "id": "minecraft:chainmail_boots" + }, + { + "id": "minecraft:iron_boots" + }, + { + "id": "minecraft:golden_boots" + }, + { + "id": "minecraft:diamond_boots" + }, + { + "id": "minecraft:netherite_boots" + }, + { + "id": "minecraft:wooden_sword" + }, + { + "id": "minecraft:stone_sword" + }, + { + "id": "minecraft:iron_sword" + }, + { + "id": "minecraft:golden_sword" + }, + { + "id": "minecraft:diamond_sword" + }, + { + "id": "minecraft:netherite_sword" + }, + { + "id": "minecraft:wooden_axe" + }, + { + "id": "minecraft:stone_axe" + }, + { + "id": "minecraft:iron_axe" + }, + { + "id": "minecraft:golden_axe" + }, + { + "id": "minecraft:diamond_axe" + }, + { + "id": "minecraft:netherite_axe" + }, + { + "id": "minecraft:wooden_pickaxe" + }, + { + "id": "minecraft:stone_pickaxe" + }, + { + "id": "minecraft:iron_pickaxe" + }, + { + "id": "minecraft:golden_pickaxe" + }, + { + "id": "minecraft:diamond_pickaxe" + }, + { + "id": "minecraft:netherite_pickaxe" + }, + { + "id": "minecraft:wooden_shovel" + }, + { + "id": "minecraft:stone_shovel" + }, + { + "id": "minecraft:iron_shovel" + }, + { + "id": "minecraft:golden_shovel" + }, + { + "id": "minecraft:diamond_shovel" + }, + { + "id": "minecraft:netherite_shovel" + }, + { + "id": "minecraft:wooden_hoe" + }, + { + "id": "minecraft:stone_hoe" + }, + { + "id": "minecraft:iron_hoe" + }, + { + "id": "minecraft:golden_hoe" + }, + { + "id": "minecraft:diamond_hoe" + }, + { + "id": "minecraft:netherite_hoe" + }, + { + "id": "minecraft:bow" + }, + { + "id": "minecraft:crossbow" + }, + { + "id": "minecraft:arrow" + }, + { + "id": "minecraft:arrow", + "damage": 6 + }, + { + "id": "minecraft:arrow", + "damage": 7 + }, + { + "id": "minecraft:arrow", + "damage": 8 + }, + { + "id": "minecraft:arrow", + "damage": 9 + }, + { + "id": "minecraft:arrow", + "damage": 10 + }, + { + "id": "minecraft:arrow", + "damage": 11 + }, + { + "id": "minecraft:arrow", + "damage": 12 + }, + { + "id": "minecraft:arrow", + "damage": 13 + }, + { + "id": "minecraft:arrow", + "damage": 14 + }, + { + "id": "minecraft:arrow", + "damage": 15 + }, + { + "id": "minecraft:arrow", + "damage": 16 + }, + { + "id": "minecraft:arrow", + "damage": 17 + }, + { + "id": "minecraft:arrow", + "damage": 18 + }, + { + "id": "minecraft:arrow", + "damage": 19 + }, + { + "id": "minecraft:arrow", + "damage": 20 + }, + { + "id": "minecraft:arrow", + "damage": 21 + }, + { + "id": "minecraft:arrow", + "damage": 22 + }, + { + "id": "minecraft:arrow", + "damage": 23 + }, + { + "id": "minecraft:arrow", + "damage": 24 + }, + { + "id": "minecraft:arrow", + "damage": 25 + }, + { + "id": "minecraft:arrow", + "damage": 26 + }, + { + "id": "minecraft:arrow", + "damage": 27 + }, + { + "id": "minecraft:arrow", + "damage": 28 + }, + { + "id": "minecraft:arrow", + "damage": 29 + }, + { + "id": "minecraft:arrow", + "damage": 30 + }, + { + "id": "minecraft:arrow", + "damage": 31 + }, + { + "id": "minecraft:arrow", + "damage": 32 + }, + { + "id": "minecraft:arrow", + "damage": 33 + }, + { + "id": "minecraft:arrow", + "damage": 34 + }, + { + "id": "minecraft:arrow", + "damage": 35 + }, + { + "id": "minecraft:arrow", + "damage": 36 + }, + { + "id": "minecraft:arrow", + "damage": 37 + }, + { + "id": "minecraft:arrow", + "damage": 38 + }, + { + "id": "minecraft:arrow", + "damage": 39 + }, + { + "id": "minecraft:arrow", + "damage": 40 + }, + { + "id": "minecraft:arrow", + "damage": 41 + }, + { + "id": "minecraft:arrow", + "damage": 42 + }, + { + "id": "minecraft:arrow", + "damage": 43 + }, + { + "id": "minecraft:shield" + }, + { + "id": "minecraft:cooked_chicken" + }, + { + "id": "minecraft:cooked_porkchop" + }, + { + "id": "minecraft:cooked_beef" + }, + { + "id": "minecraft:cooked_mutton" + }, + { + "id": "minecraft:cooked_rabbit" + }, + { + "id": "minecraft:cooked_cod" + }, + { + "id": "minecraft:cooked_salmon" + }, + { + "id": "minecraft:bread" + }, + { + "id": "minecraft:mushroom_stew" + }, + { + "id": "minecraft:beetroot_soup" + }, + { + "id": "minecraft:rabbit_stew" + }, + { + "id": "minecraft:baked_potato" + }, + { + "id": "minecraft:cookie" + }, + { + "id": "minecraft:pumpkin_pie" + }, + { + "id": "minecraft:cake" + }, + { + "id": "minecraft:dried_kelp" + }, + { + "id": "minecraft:fishing_rod" + }, + { + "id": "minecraft:carrot_on_a_stick" + }, + { + "id": "minecraft:warped_fungus_on_a_stick" + }, + { + "id": "minecraft:snowball" + }, + { + "id": "minecraft:shears" + }, + { + "id": "minecraft:flint_and_steel" + }, + { + "id": "minecraft:lead" + }, + { + "id": "minecraft:clock" + }, + { + "id": "minecraft:compass" + }, + { + "id": "minecraft:recovery_compass" + }, + { + "id": "minecraft:goat_horn" + }, + { + "id": "minecraft:goat_horn", + "damage": 1 + }, + { + "id": "minecraft:goat_horn", + "damage": 2 + }, + { + "id": "minecraft:goat_horn", + "damage": 3 + }, + { + "id": "minecraft:goat_horn", + "damage": 4 + }, + { + "id": "minecraft:goat_horn", + "damage": 5 + }, + { + "id": "minecraft:goat_horn", + "damage": 6 + }, + { + "id": "minecraft:goat_horn", + "damage": 7 + }, + { + "id": "minecraft:empty_map" + }, + { + "id": "minecraft:empty_map", + "damage": 2 + }, + { + "id": "minecraft:saddle" + }, + { + "id": "minecraft:leather_horse_armor" + }, + { + "id": "minecraft:iron_horse_armor" + }, + { + "id": "minecraft:golden_horse_armor" + }, + { + "id": "minecraft:diamond_horse_armor" + }, + { + "id": "minecraft:trident" + }, + { + "id": "minecraft:turtle_helmet" + }, + { + "id": "minecraft:elytra" + }, + { + "id": "minecraft:totem_of_undying" + }, + { + "id": "minecraft:glass_bottle" + }, + { + "id": "minecraft:experience_bottle" + }, + { + "id": "minecraft:potion" + }, + { + "id": "minecraft:potion", + "damage": 1 + }, + { + "id": "minecraft:potion", + "damage": 2 + }, + { + "id": "minecraft:potion", + "damage": 3 + }, + { + "id": "minecraft:potion", + "damage": 4 + }, + { + "id": "minecraft:potion", + "damage": 5 + }, + { + "id": "minecraft:potion", + "damage": 6 + }, + { + "id": "minecraft:potion", + "damage": 7 + }, + { + "id": "minecraft:potion", + "damage": 8 + }, + { + "id": "minecraft:potion", + "damage": 9 + }, + { + "id": "minecraft:potion", + "damage": 10 + }, + { + "id": "minecraft:potion", + "damage": 11 + }, + { + "id": "minecraft:potion", + "damage": 12 + }, + { + "id": "minecraft:potion", + "damage": 13 + }, + { + "id": "minecraft:potion", + "damage": 14 + }, + { + "id": "minecraft:potion", + "damage": 15 + }, + { + "id": "minecraft:potion", + "damage": 16 + }, + { + "id": "minecraft:potion", + "damage": 17 + }, + { + "id": "minecraft:potion", + "damage": 18 + }, + { + "id": "minecraft:potion", + "damage": 19 + }, + { + "id": "minecraft:potion", + "damage": 20 + }, + { + "id": "minecraft:potion", + "damage": 21 + }, + { + "id": "minecraft:potion", + "damage": 22 + }, + { + "id": "minecraft:potion", + "damage": 23 + }, + { + "id": "minecraft:potion", + "damage": 24 + }, + { + "id": "minecraft:potion", + "damage": 25 + }, + { + "id": "minecraft:potion", + "damage": 26 + }, + { + "id": "minecraft:potion", + "damage": 27 + }, + { + "id": "minecraft:potion", + "damage": 28 + }, + { + "id": "minecraft:potion", + "damage": 29 + }, + { + "id": "minecraft:potion", + "damage": 30 + }, + { + "id": "minecraft:potion", + "damage": 31 + }, + { + "id": "minecraft:potion", + "damage": 32 + }, + { + "id": "minecraft:potion", + "damage": 33 + }, + { + "id": "minecraft:potion", + "damage": 34 + }, + { + "id": "minecraft:potion", + "damage": 35 + }, + { + "id": "minecraft:potion", + "damage": 36 + }, + { + "id": "minecraft:potion", + "damage": 37 + }, + { + "id": "minecraft:potion", + "damage": 38 + }, + { + "id": "minecraft:potion", + "damage": 39 + }, + { + "id": "minecraft:potion", + "damage": 40 + }, + { + "id": "minecraft:potion", + "damage": 41 + }, + { + "id": "minecraft:potion", + "damage": 42 + }, + { + "id": "minecraft:splash_potion" + }, + { + "id": "minecraft:splash_potion", + "damage": 1 + }, + { + "id": "minecraft:splash_potion", + "damage": 2 + }, + { + "id": "minecraft:splash_potion", + "damage": 3 + }, + { + "id": "minecraft:splash_potion", + "damage": 4 + }, + { + "id": "minecraft:splash_potion", + "damage": 5 + }, + { + "id": "minecraft:splash_potion", + "damage": 6 + }, + { + "id": "minecraft:splash_potion", + "damage": 7 + }, + { + "id": "minecraft:splash_potion", + "damage": 8 + }, + { + "id": "minecraft:splash_potion", + "damage": 9 + }, + { + "id": "minecraft:splash_potion", + "damage": 10 + }, + { + "id": "minecraft:splash_potion", + "damage": 11 + }, + { + "id": "minecraft:splash_potion", + "damage": 12 + }, + { + "id": "minecraft:splash_potion", + "damage": 13 + }, + { + "id": "minecraft:splash_potion", + "damage": 14 + }, + { + "id": "minecraft:splash_potion", + "damage": 15 + }, + { + "id": "minecraft:splash_potion", + "damage": 16 + }, + { + "id": "minecraft:splash_potion", + "damage": 17 + }, + { + "id": "minecraft:splash_potion", + "damage": 18 + }, + { + "id": "minecraft:splash_potion", + "damage": 19 + }, + { + "id": "minecraft:splash_potion", + "damage": 20 + }, + { + "id": "minecraft:splash_potion", + "damage": 21 + }, + { + "id": "minecraft:splash_potion", + "damage": 22 + }, + { + "id": "minecraft:splash_potion", + "damage": 23 + }, + { + "id": "minecraft:splash_potion", + "damage": 24 + }, + { + "id": "minecraft:splash_potion", + "damage": 25 + }, + { + "id": "minecraft:splash_potion", + "damage": 26 + }, + { + "id": "minecraft:splash_potion", + "damage": 27 + }, + { + "id": "minecraft:splash_potion", + "damage": 28 + }, + { + "id": "minecraft:splash_potion", + "damage": 29 + }, + { + "id": "minecraft:splash_potion", + "damage": 30 + }, + { + "id": "minecraft:splash_potion", + "damage": 31 + }, + { + "id": "minecraft:splash_potion", + "damage": 32 + }, + { + "id": "minecraft:splash_potion", + "damage": 33 + }, + { + "id": "minecraft:splash_potion", + "damage": 34 + }, + { + "id": "minecraft:splash_potion", + "damage": 35 + }, + { + "id": "minecraft:splash_potion", + "damage": 36 + }, + { + "id": "minecraft:splash_potion", + "damage": 37 + }, + { + "id": "minecraft:splash_potion", + "damage": 38 + }, + { + "id": "minecraft:splash_potion", + "damage": 39 + }, + { + "id": "minecraft:splash_potion", + "damage": 40 + }, + { + "id": "minecraft:splash_potion", + "damage": 41 + }, + { + "id": "minecraft:splash_potion", + "damage": 42 + }, + { + "id": "minecraft:lingering_potion" + }, + { + "id": "minecraft:lingering_potion", + "damage": 1 + }, + { + "id": "minecraft:lingering_potion", + "damage": 2 + }, + { + "id": "minecraft:lingering_potion", + "damage": 3 + }, + { + "id": "minecraft:lingering_potion", + "damage": 4 + }, + { + "id": "minecraft:lingering_potion", + "damage": 5 + }, + { + "id": "minecraft:lingering_potion", + "damage": 6 + }, + { + "id": "minecraft:lingering_potion", + "damage": 7 + }, + { + "id": "minecraft:lingering_potion", + "damage": 8 + }, + { + "id": "minecraft:lingering_potion", + "damage": 9 + }, + { + "id": "minecraft:lingering_potion", + "damage": 10 + }, + { + "id": "minecraft:lingering_potion", + "damage": 11 + }, + { + "id": "minecraft:lingering_potion", + "damage": 12 + }, + { + "id": "minecraft:lingering_potion", + "damage": 13 + }, + { + "id": "minecraft:lingering_potion", + "damage": 14 + }, + { + "id": "minecraft:lingering_potion", + "damage": 15 + }, + { + "id": "minecraft:lingering_potion", + "damage": 16 + }, + { + "id": "minecraft:lingering_potion", + "damage": 17 + }, + { + "id": "minecraft:lingering_potion", + "damage": 18 + }, + { + "id": "minecraft:lingering_potion", + "damage": 19 + }, + { + "id": "minecraft:lingering_potion", + "damage": 20 + }, + { + "id": "minecraft:lingering_potion", + "damage": 21 + }, + { + "id": "minecraft:lingering_potion", + "damage": 22 + }, + { + "id": "minecraft:lingering_potion", + "damage": 23 + }, + { + "id": "minecraft:lingering_potion", + "damage": 24 + }, + { + "id": "minecraft:lingering_potion", + "damage": 25 + }, + { + "id": "minecraft:lingering_potion", + "damage": 26 + }, + { + "id": "minecraft:lingering_potion", + "damage": 27 + }, + { + "id": "minecraft:lingering_potion", + "damage": 28 + }, + { + "id": "minecraft:lingering_potion", + "damage": 29 + }, + { + "id": "minecraft:lingering_potion", + "damage": 30 + }, + { + "id": "minecraft:lingering_potion", + "damage": 31 + }, + { + "id": "minecraft:lingering_potion", + "damage": 32 + }, + { + "id": "minecraft:lingering_potion", + "damage": 33 + }, + { + "id": "minecraft:lingering_potion", + "damage": 34 + }, + { + "id": "minecraft:lingering_potion", + "damage": 35 + }, + { + "id": "minecraft:lingering_potion", + "damage": 36 + }, + { + "id": "minecraft:lingering_potion", + "damage": 37 + }, + { + "id": "minecraft:lingering_potion", + "damage": 38 + }, + { + "id": "minecraft:lingering_potion", + "damage": 39 + }, + { + "id": "minecraft:lingering_potion", + "damage": 40 + }, + { + "id": "minecraft:lingering_potion", + "damage": 41 + }, + { + "id": "minecraft:lingering_potion", + "damage": 42 + }, + { + "id": "minecraft:spyglass" + }, + { + "id": "minecraft:brush" + }, + { + "id": "minecraft:stick" + }, + { + "id": "minecraft:bed" + }, + { + "id": "minecraft:bed", + "damage": 8 + }, + { + "id": "minecraft:bed", + "damage": 7 + }, + { + "id": "minecraft:bed", + "damage": 15 + }, + { + "id": "minecraft:bed", + "damage": 12 + }, + { + "id": "minecraft:bed", + "damage": 14 + }, + { + "id": "minecraft:bed", + "damage": 1 + }, + { + "id": "minecraft:bed", + "damage": 4 + }, + { + "id": "minecraft:bed", + "damage": 5 + }, + { + "id": "minecraft:bed", + "damage": 13 + }, + { + "id": "minecraft:bed", + "damage": 9 + }, + { + "id": "minecraft:bed", + "damage": 3 + }, + { + "id": "minecraft:bed", + "damage": 11 + }, + { + "id": "minecraft:bed", + "damage": 10 + }, + { + "id": "minecraft:bed", + "damage": 2 + }, + { + "id": "minecraft:bed", + "damage": 6 + }, + { + "id": "minecraft:torch", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQyAAAACAQAbmFtZQ8AbWluZWNyYWZ0OnRvcmNoBAkAbmFtZV9oYXNoagn7rmDBzisDCgBuZXR3b3JrX2lkdwgAAAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:soul_torch", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQLAgAACAQAbmFtZRQAbWluZWNyYWZ0OnNvdWxfdG9yY2gECQBuYW1lX2hhc2huixOT04BRdQMKAG5ldHdvcmtfaWQRHwAACgYAc3RhdGVzCBYAdG9yY2hfZmFjaW5nX2RpcmVjdGlvbgcAdW5rbm93bgADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sea_pickle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAQAACAQAbmFtZRQAbWluZWNyYWZ0OnNlYV9waWNrbGUECQBuYW1lX2hhc2iONEfZJB+glgMKAG5ldHdvcmtfaWRvJwAACgYAc3RhdGVzAw0AY2x1c3Rlcl9jb3VudAAAAAABCABkZWFkX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:lantern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTPAQAACAQAbmFtZREAbWluZWNyYWZ0OmxhbnRlcm4ECQBuYW1lX2hhc2hMw44VI2HWygMKAG5ldHdvcmtfaWQLMAAACgYAc3RhdGVzAQcAaGFuZ2luZwAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:soul_lantern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQMAgAACAQAbmFtZRYAbWluZWNyYWZ0OnNvdWxfbGFudGVybgQJAG5hbWVfaGFzaGjIpjxk9z+RAwoAbmV0d29ya19pZF4lAAAKBgBzdGF0ZXMBBwBoYW5naW5nAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSbAgAACAQAbmFtZRAAbWluZWNyYWZ0OmNhbmRsZQQJAG5hbWVfaGFzaHPd+MsNdWTfAwoAbmV0d29ya19pZCUzAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:white_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAgAACAQAbmFtZRYAbWluZWNyYWZ0OndoaXRlX2NhbmRsZQQJAG5hbWVfaGFzaN1EG5Q1mHiEAwoAbmV0d29ya19pZIQjAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:orange_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSdAgAACAQAbmFtZRcAbWluZWNyYWZ0Om9yYW5nZV9jYW5kbGUECQBuYW1lX2hhc2jySEVWHgUIHQMKAG5ldHdvcmtfaWRYBAAACgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:magenta_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSeAgAACAQAbmFtZRgAbWluZWNyYWZ0Om1hZ2VudGFfY2FuZGxlBAkAbmFtZV9oYXNoG0u6YIOoBSEDCgBuZXR3b3JrX2lklAQAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:light_blue_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSfAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfY2FuZGxlBAkAbmFtZV9oYXNocXGeK0zgrG0DCgBuZXR3b3JrX2lkBB0AAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:yellow_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSgAgAACAQAbmFtZRcAbWluZWNyYWZ0OnllbGxvd19jYW5kbGUECQBuYW1lX2hhc2i00dtusU3CqQMKAG5ldHdvcmtfaWRMLAAACgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:lime_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWShAgAACAQAbmFtZRUAbWluZWNyYWZ0OmxpbWVfY2FuZGxlBAkAbmFtZV9oYXNokcmrw5xvz7ADCgBuZXR3b3JrX2lk/CwAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:pink_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSiAgAACAQAbmFtZRUAbWluZWNyYWZ0OnBpbmtfY2FuZGxlBAkAbmFtZV9oYXNoQJdEY4sZ0dwDCgBuZXR3b3JrX2lkAzMAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:gray_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSjAgAACAQAbmFtZRUAbWluZWNyYWZ0OmdyYXlfY2FuZGxlBAkAbmFtZV9oYXNoS5poSo9wBDEDCgBuZXR3b3JrX2lkXwkAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:light_gray_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSkAgAACAQAbmFtZRsAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfY2FuZGxlBAkAbmFtZV9oYXNo9ruTZLBNMasDCgBuZXR3b3JrX2lkaSwAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cyan_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSlAgAACAQAbmFtZRUAbWluZWNyYWZ0OmN5YW5fY2FuZGxlBAkAbmFtZV9oYXNoc/M8PNVcjOwDCgBuZXR3b3JrX2lkeDQAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:purple_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSmAgAACAQAbmFtZRcAbWluZWNyYWZ0OnB1cnBsZV9jYW5kbGUECQBuYW1lX2hhc2jaI3xUW0/myQMKAG5ldHdvcmtfaWTmLwAACgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:blue_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSnAgAACAQAbmFtZRUAbWluZWNyYWZ0OmJsdWVfY2FuZGxlBAkAbmFtZV9oYXNoAASSPW6TgQADCgBuZXR3b3JrX2lkAgAAAAoGAHN0YXRlcwMHAGNhbmRsZXMAAAAAAQMAbGl0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:brown_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSoAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJyb3duX2NhbmRsZQQJAG5hbWVfaGFzaDia0l6s1+WYAwoAbmV0d29ya19pZCQpAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:green_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAgAACAQAbmFtZRYAbWluZWNyYWZ0OmdyZWVuX2NhbmRsZQQJAG5hbWVfaGFzaLeFPO1l+fIoAwoAbmV0d29ya19pZKcHAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:red_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSqAgAACAQAbmFtZRQAbWluZWNyYWZ0OnJlZF9jYW5kbGUECQBuYW1lX2hhc2jjAQpGf59ZdwMKAG5ldHdvcmtfaWQ2HwAACgYAc3RhdGVzAwcAY2FuZGxlcwAAAAABAwBsaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:black_candle", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSrAgAACAQAbmFtZRYAbWluZWNyYWZ0OmJsYWNrX2NhbmRsZQQJAG5hbWVfaGFzaB+wRDpOqREKAwoAbmV0d29ya19pZE0CAAAKBgBzdGF0ZXMDBwBjYW5kbGVzAAAAAAEDAGxpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:crafting_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ6AAAACAQAbmFtZRgAbWluZWNyYWZ0OmNyYWZ0aW5nX3RhYmxlBAkAbmFtZV9oYXNoe76VAmjvbpYDCgBuZXR3b3JrX2lkbicAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cartography_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTHAQAACAQAbmFtZRsAbWluZWNyYWZ0OmNhcnRvZ3JhcGh5X3RhYmxlBAkAbmFtZV9oYXNomaWiiD/znP8DCgBuZXR3b3JrX2lkFDcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:fletching_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTIAQAACAQAbmFtZRkAbWluZWNyYWZ0OmZsZXRjaGluZ190YWJsZQQJAG5hbWVfaGFzaPFibh8unKyUAwoAbmV0d29ya19pZDUnAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:smithing_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTJAQAACAQAbmFtZRgAbWluZWNyYWZ0OnNtaXRoaW5nX3RhYmxlBAkAbmFtZV9oYXNo4tFES2xOXEYDCgBuZXR3b3JrX2lk6RcAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:beehive", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAQAACAQAbmFtZREAbWluZWNyYWZ0OmJlZWhpdmUECQBuYW1lX2hhc2hCcqn12UbNpwMKAG5ldHdvcmtfaWQHLAAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAMLAGhvbmV5X2xldmVsAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:suspicious_sand", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQQAwAACAQAbmFtZRkAbWluZWNyYWZ0OnN1c3BpY2lvdXNfc2FuZAQJAG5hbWVfaGFzaL67QsuvLP00AwoAbmV0d29ya19pZCYKAAAKBgBzdGF0ZXMDEABicnVzaGVkX3Byb2dyZXNzAAAAAAEHAGhhbmdpbmcBAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:suspicious_gravel", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ8AwAACAQAbmFtZRsAbWluZWNyYWZ0OnN1c3BpY2lvdXNfZ3JhdmVsBAkAbmFtZV9oYXNoJSVbGNk7C3oDCgBuZXR3b3JrX2lkix8AAAoGAHN0YXRlcwMQAGJydXNoZWRfcHJvZ3Jlc3MAAAAAAQcAaGFuZ2luZwEAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:campfire" + }, + { + "id": "minecraft:soul_campfire" + }, + { + "id": "minecraft:furnace", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ9AAAACAQAbmFtZREAbWluZWNyYWZ0OmZ1cm5hY2UECQBuYW1lX2hhc2ioOQrludYY8wMKAG5ldHdvcmtfaWQaNQAACgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:blast_furnace", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTDAQAACAQAbmFtZRcAbWluZWNyYWZ0OmJsYXN0X2Z1cm5hY2UECQBuYW1lX2hhc2ivDbnjkpGm5QMKAG5ldHdvcmtfaWTUMwAACgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:smoker", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTFAQAACAQAbmFtZRAAbWluZWNyYWZ0OnNtb2tlcgQJAG5hbWVfaGFzaJd1rDMkRWomAwoAbmV0d29ya19pZO0GAAAKBgBzdGF0ZXMIHABtaW5lY3JhZnQ6Y2FyZGluYWxfZGlyZWN0aW9uBQBzb3V0aAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:respawn_anchor", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQPAgAACAQAbmFtZRgAbWluZWNyYWZ0OnJlc3Bhd25fYW5jaG9yBAkAbmFtZV9oYXNoZOdcjW05qigDCgBuZXR3b3JrX2lkoQcAAAoGAHN0YXRlcwMVAHJlc3Bhd25fYW5jaG9yX2NoYXJnZQAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:brewing_stand" + }, + { + "id": "minecraft:anvil", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkRC4AAAoGAHN0YXRlcwgGAGRhbWFnZQkAdW5kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:anvil", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkSC4AAAoGAHN0YXRlcwgGAGRhbWFnZRAAc2xpZ2h0bHlfZGFtYWdlZAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:anvil", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSRAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmFudmlsBAkAbmFtZV9oYXNoNqB3fgcUCbwDCgBuZXR3b3JrX2lkTC4AAAoGAHN0YXRlcwgGAGRhbWFnZQwAdmVyeV9kYW1hZ2VkCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:grindstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTCAQAACAQAbmFtZRQAbWluZWNyYWZ0OmdyaW5kc3RvbmUECQBuYW1lX2hhc2id56zc0nk99wMKAG5ldHdvcmtfaWT6NQAACgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:enchanting_table", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR0AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuY2hhbnRpbmdfdGFibGUECQBuYW1lX2hhc2jgIx24VLvMvwMKAG5ldHdvcmtfaWSaLgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:bookshelf", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQvAAAACAQAbmFtZRMAbWluZWNyYWZ0OmJvb2tzaGVsZgQJAG5hbWVfaGFzaDU04DrgJCS9AwoAbmV0d29ya19pZGouAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:chiseled_bookshelf", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQNAwAACAQAbmFtZRwAbWluZWNyYWZ0OmNoaXNlbGVkX2Jvb2tzaGVsZgQJAG5hbWVfaGFzaNXDBnsIsywYAwoAbmV0d29ya19pZA0DAAAKBgBzdGF0ZXMDDABib29rc19zdG9yZWQAAAAAAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:lectern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTBAQAACAQAbmFtZREAbWluZWNyYWZ0OmxlY3Rlcm4ECQBuYW1lX2hhc2j5Z4Mmi/1QxAMKAG5ldHdvcmtfaWR8LwAACgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAc291dGgBCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cauldron" + }, + { + "id": "minecraft:composter", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTUAQAACAQAbmFtZRMAbWluZWNyYWZ0OmNvbXBvc3RlcgQJAG5hbWVfaGFzaPAADHptzeWJAwoAbmV0d29ya19pZO4jAAAKBgBzdGF0ZXMDFABjb21wb3N0ZXJfZmlsbF9sZXZlbAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:chest", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ2AAAACAQAbmFtZQ8AbWluZWNyYWZ0OmNoZXN0BAkAbmFtZV9oYXNog9ozMxlcA88DCgBuZXR3b3JrX2lkWDAAAAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:trapped_chest", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSSAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyYXBwZWRfY2hlc3QECQBuYW1lX2hhc2g2qpF9stsEjgMKAG5ldHdvcmtfaWS5JAAACgYAc3RhdGVzCBwAbWluZWNyYWZ0OmNhcmRpbmFsX2RpcmVjdGlvbgUAbm9ydGgAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:ender_chest", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSCAAAACAQAbmFtZRUAbWluZWNyYWZ0OmVuZGVyX2NoZXN0BAkAbmFtZV9oYXNohEZzOFdg0WUDCgBuZXR3b3JrX2lkMhwAAAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:barrel", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTKAQAACAQAbmFtZRAAbWluZWNyYWZ0OmJhcnJlbAQJAG5hbWVfaGFzaHDkRPGymiRqAwoAbmV0d29ya19pZM8cAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAAAAAAEIAG9wZW5fYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:undyed_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAAAACAQAbmFtZRwAbWluZWNyYWZ0OnVuZHllZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaOC9mypm/MlBAwoAbmV0d29ya19pZLkXAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:white_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTaAAAACAQAbmFtZRsAbWluZWNyYWZ0OndoaXRlX3NodWxrZXJfYm94BAkAbmFtZV9oYXNosK79m1rPUBwDCgBuZXR3b3JrX2lkVQQAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:light_gray_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRrAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2dyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iBe5zq7PxHmgMKAG5ldHdvcmtfaWRGKQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:gray_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRqAwAACAQAbmFtZRoAbWluZWNyYWZ0OmdyYXlfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2ga2s8ctjHUhgMKAG5ldHdvcmtfaWSoIwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:black_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRyAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJsYWNrX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoPm03OZphrp8DCgBuZXR3b3JrX2lklysAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:brown_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRvAwAACAQAbmFtZRsAbWluZWNyYWZ0OmJyb3duX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoT3DD6qAL9cADCgBuZXR3b3JrX2lkPy8AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:red_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRxAwAACAQAbmFtZRkAbWluZWNyYWZ0OnJlZF9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaMIlKSCzqSZoAwoAbmV0d29ya19pZHMcAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:orange_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRkAwAACAQAbmFtZRwAbWluZWNyYWZ0Om9yYW5nZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaG2MAXU67wGrAwoAbmV0d29ya19pZGgsAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:yellow_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRnAwAACAQAbmFtZRwAbWluZWNyYWZ0OnllbGxvd19zaHVsa2VyX2JveAQJAG5hbWVfaGFzaIsLwQHYjcIEAwoAbmV0d29ya19pZHsAAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:lime_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRoAwAACAQAbmFtZRoAbWluZWNyYWZ0OmxpbWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hUwBkg+faUGAMKAG5ldHdvcmtfaWQWBAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:green_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRwAwAACAQAbmFtZRsAbWluZWNyYWZ0OmdyZWVuX3NodWxrZXJfYm94BAkAbmFtZV9oYXNoZgUeT3LupLUDCgBuZXR3b3JrX2lkpS0AAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:cyan_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRsAwAACAQAbmFtZRoAbWluZWNyYWZ0OmN5YW5fc2h1bGtlcl9ib3gECQBuYW1lX2hhc2gSfbjteXg5yAMKAG5ldHdvcmtfaWTZLwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:light_blue_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRmAwAACAQAbmFtZSAAbWluZWNyYWZ0OmxpZ2h0X2JsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2h0VFCX0qsRxQMKAG5ldHdvcmtfaWSXLwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:blue_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRuAwAACAQAbmFtZRoAbWluZWNyYWZ0OmJsdWVfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2hn9gS0XIe6rAMKAG5ldHdvcmtfaWSZLAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:purple_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRtAwAACAQAbmFtZRwAbWluZWNyYWZ0OnB1cnBsZV9zaHVsa2VyX2JveAQJAG5hbWVfaGFzaEV/lkNPxRDdAwoAbmV0d29ya19pZAszAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:magenta_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRlAwAACAQAbmFtZR0AbWluZWNyYWZ0Om1hZ2VudGFfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2iqWM7IJHxcFgMKAG5ldHdvcmtfaWTgAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:pink_shulker_box", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRpAwAACAQAbmFtZRoAbWluZWNyYWZ0OnBpbmtfc2h1bGtlcl9ib3gECQBuYW1lX2hhc2in1tkJ1GNcZgMKAG5ldHdvcmtfaWQ6HAAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:armor_stand" + }, + { + "id": "minecraft:noteblock", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAAAACAQAbmFtZRMAbWluZWNyYWZ0Om5vdGVibG9jawQJAG5hbWVfaGFzaHPA8dBBH0UaAwoAbmV0d29ya19pZEUEAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:jukebox", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRUAAAACAQAbmFtZREAbWluZWNyYWZ0Omp1a2Vib3gECQBuYW1lX2hhc2ieAIPExf/ZfgMKAG5ldHdvcmtfaWS1IQAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:music_disc_13" + }, + { + "id": "minecraft:music_disc_cat" + }, + { + "id": "minecraft:music_disc_blocks" + }, + { + "id": "minecraft:music_disc_chirp" + }, + { + "id": "minecraft:music_disc_far" + }, + { + "id": "minecraft:music_disc_mall" + }, + { + "id": "minecraft:music_disc_mellohi" + }, + { + "id": "minecraft:music_disc_stal" + }, + { + "id": "minecraft:music_disc_strad" + }, + { + "id": "minecraft:music_disc_ward" + }, + { + "id": "minecraft:music_disc_11" + }, + { + "id": "minecraft:music_disc_wait" + }, + { + "id": "minecraft:music_disc_otherside" + }, + { + "id": "minecraft:music_disc_5" + }, + { + "id": "minecraft:music_disc_pigstep" + }, + { + "id": "minecraft:music_disc_relic" + }, + { + "id": "minecraft:disc_fragment_5" + }, + { + "id": "minecraft:glowstone_dust" + }, + { + "id": "minecraft:glowstone", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRZAAAACAQAbmFtZRMAbWluZWNyYWZ0Omdsb3dzdG9uZQQJAG5hbWVfaGFzaFYqXNkefIlPAwoAbmV0d29ya19pZA0aAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:redstone_lamp", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR7AAAACAQAbmFtZRcAbWluZWNyYWZ0OnJlZHN0b25lX2xhbXAECQBuYW1lX2hhc2hJ9V80caPvEgMKAG5ldHdvcmtfaWSnAgAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:sea_lantern", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSpAAAACAQAbmFtZRUAbWluZWNyYWZ0OnNlYV9sYW50ZXJuBAkAbmFtZV9oYXNoLPsv1TX9M+QDCgBuZXR3b3JrX2lkuzMAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:oak_sign" + }, + { + "id": "minecraft:spruce_sign" + }, + { + "id": "minecraft:birch_sign" + }, + { + "id": "minecraft:jungle_sign" + }, + { + "id": "minecraft:acacia_sign" + }, + { + "id": "minecraft:dark_oak_sign" + }, + { + "id": "minecraft:mangrove_sign" + }, + { + "id": "minecraft:cherry_sign" + }, + { + "id": "minecraft:bamboo_sign" + }, + { + "id": "minecraft:crimson_sign" + }, + { + "id": "minecraft:warped_sign" + }, + { + "id": "minecraft:oak_hanging_sign" + }, + { + "id": "minecraft:spruce_hanging_sign" + }, + { + "id": "minecraft:birch_hanging_sign" + }, + { + "id": "minecraft:jungle_hanging_sign" + }, + { + "id": "minecraft:acacia_hanging_sign" + }, + { + "id": "minecraft:dark_oak_hanging_sign" + }, + { + "id": "minecraft:mangrove_hanging_sign" + }, + { + "id": "minecraft:cherry_hanging_sign" + }, + { + "id": "minecraft:bamboo_hanging_sign" + }, + { + "id": "minecraft:crimson_hanging_sign" + }, + { + "id": "minecraft:warped_hanging_sign" + }, + { + "id": "minecraft:painting" + }, + { + "id": "minecraft:frame" + }, + { + "id": "minecraft:glow_frame" + }, + { + "id": "minecraft:honey_bottle" + }, + { + "id": "minecraft:flower_pot" + }, + { + "id": "minecraft:bowl" + }, + { + "id": "minecraft:bucket" + }, + { + "id": "minecraft:milk_bucket" + }, + { + "id": "minecraft:water_bucket" + }, + { + "id": "minecraft:lava_bucket" + }, + { + "id": "minecraft:cod_bucket" + }, + { + "id": "minecraft:salmon_bucket" + }, + { + "id": "minecraft:tropical_fish_bucket" + }, + { + "id": "minecraft:pufferfish_bucket" + }, + { + "id": "minecraft:powder_snow_bucket" + }, + { + "id": "minecraft:axolotl_bucket" + }, + { + "id": "minecraft:tadpole_bucket" + }, + { + "id": "minecraft:skull", + "damage": 3 + }, + { + "id": "minecraft:skull", + "damage": 2 + }, + { + "id": "minecraft:skull", + "damage": 4 + }, + { + "id": "minecraft:skull", + "damage": 5 + }, + { + "id": "minecraft:skull" + }, + { + "id": "minecraft:skull", + "damage": 1 + }, + { + "id": "minecraft:skull", + "damage": 6 + }, + { + "id": "minecraft:beacon", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSKAAAACAQAbmFtZRAAbWluZWNyYWZ0OmJlYWNvbgQJAG5hbWVfaGFzaACwhhfSkdkHAwoAbmV0d29ya19pZDMCAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:bell", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTNAQAACAQAbmFtZQ4AbWluZWNyYWZ0OmJlbGwECQBuYW1lX2hhc2iPqsgDXRcsxAMKAG5ldHdvcmtfaWRcLwAACgYAc3RhdGVzCAoAYXR0YWNobWVudAgAc3RhbmRpbmcDCQBkaXJlY3Rpb24AAAAAAQoAdG9nZ2xlX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:conduit", + "block_state_b64": "CgAAAwgAYmxvY2tfaWScAQAACAQAbmFtZREAbWluZWNyYWZ0OmNvbmR1aXQECQBuYW1lX2hhc2jqxKAxq2EaWQMKAG5ldHdvcmtfaWR1GwAACgYAc3RhdGVzAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stonecutter_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTEAQAACAQAbmFtZRsAbWluZWNyYWZ0OnN0b25lY3V0dGVyX2Jsb2NrBAkAbmFtZV9oYXNoQAXTbAM3MeYDCgBuZXR3b3JrX2lk2zMAAAoGAHN0YXRlcwgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAG5vcnRoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:end_portal_frame", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR4AAAACAQAbmFtZRoAbWluZWNyYWZ0OmVuZF9wb3J0YWxfZnJhbWUECQBuYW1lX2hhc2gqofyUIjGOpQMKAG5ldHdvcmtfaWTHKwAACgYAc3RhdGVzARIAZW5kX3BvcnRhbF9leWVfYml0AAgcAG1pbmVjcmFmdDpjYXJkaW5hbF9kaXJlY3Rpb24FAHNvdXRoAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:coal" + }, + { + "id": "minecraft:charcoal" + }, + { + "id": "minecraft:diamond" + }, + { + "id": "minecraft:iron_nugget" + }, + { + "id": "minecraft:raw_iron" + }, + { + "id": "minecraft:raw_gold" + }, + { + "id": "minecraft:raw_copper" + }, + { + "id": "minecraft:copper_ingot" + }, + { + "id": "minecraft:iron_ingot" + }, + { + "id": "minecraft:netherite_scrap" + }, + { + "id": "minecraft:netherite_ingot" + }, + { + "id": "minecraft:gold_nugget" + }, + { + "id": "minecraft:gold_ingot" + }, + { + "id": "minecraft:emerald" + }, + { + "id": "minecraft:quartz" + }, + { + "id": "minecraft:clay_ball" + }, + { + "id": "minecraft:brick" + }, + { + "id": "minecraft:netherbrick" + }, + { + "id": "minecraft:prismarine_shard" + }, + { + "id": "minecraft:amethyst_shard" + }, + { + "id": "minecraft:prismarine_crystals" + }, + { + "id": "minecraft:nautilus_shell" + }, + { + "id": "minecraft:heart_of_the_sea" + }, + { + "id": "minecraft:turtle_scute" + }, + { + "id": "minecraft:phantom_membrane" + }, + { + "id": "minecraft:string" + }, + { + "id": "minecraft:feather" + }, + { + "id": "minecraft:flint" + }, + { + "id": "minecraft:gunpowder" + }, + { + "id": "minecraft:leather" + }, + { + "id": "minecraft:rabbit_hide" + }, + { + "id": "minecraft:rabbit_foot" + }, + { + "id": "minecraft:fire_charge" + }, + { + "id": "minecraft:blaze_rod" + }, + { + "id": "minecraft:blaze_powder" + }, + { + "id": "minecraft:magma_cream" + }, + { + "id": "minecraft:fermented_spider_eye" + }, + { + "id": "minecraft:echo_shard" + }, + { + "id": "minecraft:dragon_breath" + }, + { + "id": "minecraft:shulker_shell" + }, + { + "id": "minecraft:ghast_tear" + }, + { + "id": "minecraft:slime_ball" + }, + { + "id": "minecraft:ender_pearl" + }, + { + "id": "minecraft:ender_eye" + }, + { + "id": "minecraft:nether_star" + }, + { + "id": "minecraft:end_rod", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTQAAAACAQAbmFtZREAbWluZWNyYWZ0OmVuZF9yb2QECQBuYW1lX2hhc2jx/q5cEA0hmQMKAG5ldHdvcmtfaWQ0KQAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:lightning_rod", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQ3AgAACAQAbmFtZRcAbWluZWNyYWZ0OmxpZ2h0bmluZ19yb2QECQBuYW1lX2hhc2ioXQF1xvfHNQMKAG5ldHdvcmtfaWQ+CgAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:end_crystal" + }, + { + "id": "minecraft:paper" + }, + { + "id": "minecraft:book" + }, + { + "id": "minecraft:writable_book" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQAAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQBAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQCAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQDAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQEAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQFAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQGAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQHAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQIAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQJAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQKAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQLAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQMAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQNAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQOAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQPAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQQAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQRAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQSAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQTAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQUAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQVAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQWAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQXAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQYAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQZAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQaAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQbAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQcAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQdAAIDAGx2bAUAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQeAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQfAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQgAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQhAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQiAAIDAGx2bAQAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQjAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQkAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAEAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAIAAAA=" + }, + { + "id": "minecraft:enchanted_book", + "nbt_b64": "CgAACQQAZW5jaAoBAAAAAgIAaWQlAAIDAGx2bAMAAAA=" + }, + { + "id": "minecraft:oak_boat" + }, + { + "id": "minecraft:spruce_boat" + }, + { + "id": "minecraft:birch_boat" + }, + { + "id": "minecraft:jungle_boat" + }, + { + "id": "minecraft:acacia_boat" + }, + { + "id": "minecraft:dark_oak_boat" + }, + { + "id": "minecraft:mangrove_boat" + }, + { + "id": "minecraft:cherry_boat" + }, + { + "id": "minecraft:bamboo_raft" + }, + { + "id": "minecraft:oak_chest_boat" + }, + { + "id": "minecraft:spruce_chest_boat" + }, + { + "id": "minecraft:birch_chest_boat" + }, + { + "id": "minecraft:jungle_chest_boat" + }, + { + "id": "minecraft:acacia_chest_boat" + }, + { + "id": "minecraft:dark_oak_chest_boat" + }, + { + "id": "minecraft:mangrove_chest_boat" + }, + { + "id": "minecraft:cherry_chest_boat" + }, + { + "id": "minecraft:bamboo_chest_raft" + }, + { + "id": "minecraft:rail", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRCAAAACAQAbmFtZQ4AbWluZWNyYWZ0OnJhaWwECQBuYW1lX2hhc2hUzmhUXYJDUQMKAG5ldHdvcmtfaWQxGgAACgYAc3RhdGVzAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:golden_rail", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQbAAAACAQAbmFtZRUAbWluZWNyYWZ0OmdvbGRlbl9yYWlsBAkAbmFtZV9oYXNoOoV5MaKipoUDCgBuZXR3b3JrX2lklSMAAAoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:detector_rail", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQcAAAACAQAbmFtZRcAbWluZWNyYWZ0OmRldGVjdG9yX3JhaWwECQBuYW1lX2hhc2gVUk31qOysUQMKAG5ldHdvcmtfaWQGGwAACgYAc3RhdGVzAQ0AcmFpbF9kYXRhX2JpdAADDgByYWlsX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:activator_rail", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR+AAAACAQAbmFtZRgAbWluZWNyYWZ0OmFjdGl2YXRvcl9yYWlsBAkAbmFtZV9oYXNosIL91qriCRkDCgBuZXR3b3JrX2lkHgQAAAoGAHN0YXRlcwENAHJhaWxfZGF0YV9iaXQAAw4AcmFpbF9kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:minecart" + }, + { + "id": "minecraft:chest_minecart" + }, + { + "id": "minecraft:hopper_minecart" + }, + { + "id": "minecraft:tnt_minecart" + }, + { + "id": "minecraft:redstone" + }, + { + "id": "minecraft:redstone_block", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX2Jsb2NrBAkAbmFtZV9oYXNoRhULL0r8o0sDCgBuZXR3b3JrX2lkIxgAAAoGAHN0YXRlcwADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:redstone_torch", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRMAAAACAQAbmFtZRgAbWluZWNyYWZ0OnJlZHN0b25lX3RvcmNoBAkAbmFtZV9oYXNoizFRjpYMIDgDCgBuZXR3b3JrX2lkgxUAAAoGAHN0YXRlcwgWAHRvcmNoX2ZhY2luZ19kaXJlY3Rpb24HAHVua25vd24AAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:lever", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRFAAAACAQAbmFtZQ8AbWluZWNyYWZ0OmxldmVyBAkAbmFtZV9oYXNoGMJeLJsUMLYDCgBuZXR3b3JrX2lktS0AAAoGAHN0YXRlcwgPAGxldmVyX2RpcmVjdGlvbg4AZG93bl9lYXN0X3dlc3QBCABvcGVuX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wooden_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAAAACAQAbmFtZRcAbWluZWNyYWZ0Ondvb2Rlbl9idXR0b24ECQBuYW1lX2hhc2hR7PgSTQt0sQMKAG5ldHdvcmtfaWQULQAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:spruce_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSPAQAACAQAbmFtZRcAbWluZWNyYWZ0OnNwcnVjZV9idXR0b24ECQBuYW1lX2hhc2jBW9Z8aYE7YQMKAG5ldHdvcmtfaWT4GwAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:birch_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSMAQAACAQAbmFtZRYAbWluZWNyYWZ0OmJpcmNoX2J1dHRvbgQJAG5hbWVfaGFzaJXYgGuSHbTwAwoAbmV0d29ya19pZMU0AAAKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:jungle_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSOAQAACAQAbmFtZRcAbWluZWNyYWZ0Omp1bmdsZV9idXR0b24ECQBuYW1lX2hhc2iCgNANcJs+BQMKAG5ldHdvcmtfaWSAAAAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:acacia_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSLAQAACAQAbmFtZRcAbWluZWNyYWZ0OmFjYWNpYV9idXR0b24ECQBuYW1lX2hhc2gVvmcT7LTO0wMKAG5ldHdvcmtfaWRqMgAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:dark_oak_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSNAQAACAQAbmFtZRkAbWluZWNyYWZ0OmRhcmtfb2FrX2J1dHRvbgQJAG5hbWVfaGFzaIV10ZGGrCIEAwoAbmV0d29ya19pZGYAAAAKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:mangrove_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTmAgAACAQAbmFtZRkAbWluZWNyYWZ0Om1hbmdyb3ZlX2J1dHRvbgQJAG5hbWVfaGFzaNzeYYKLgOzJAwoAbmV0d29ya19pZP4vAAAKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cherry_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQRAwAACAQAbmFtZRcAbWluZWNyYWZ0OmNoZXJyeV9idXR0b24ECQBuYW1lX2hhc2j2/IHjeAbUcwMKAG5ldHdvcmtfaWRQHQAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:bamboo_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT+AgAACAQAbmFtZRcAbWluZWNyYWZ0OmJhbWJvb19idXR0b24ECQBuYW1lX2hhc2j7AddMi+6nsgMKAG5ldHdvcmtfaWSOLQAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRNAAAACAQAbmFtZRYAbWluZWNyYWZ0OnN0b25lX2J1dHRvbgQJAG5hbWVfaGFzaM4ejMctmvohAwoAbmV0d29ya19pZEkFAAAKBgBzdGF0ZXMBEgBidXR0b25fcHJlc3NlZF9iaXQAAxAAZmFjaW5nX2RpcmVjdGlvbgAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:crimson_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQDAgAACAQAbmFtZRgAbWluZWNyYWZ0OmNyaW1zb25fYnV0dG9uBAkAbmFtZV9oYXNofnjYHaYIeWgDCgBuZXR3b3JrX2lkdxwAAAoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:warped_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQEAgAACAQAbmFtZRcAbWluZWNyYWZ0OndhcnBlZF9idXR0b24ECQBuYW1lX2hhc2jwkV2EU6Cn1QMKAG5ldHdvcmtfaWR8MgAACgYAc3RhdGVzARIAYnV0dG9uX3ByZXNzZWRfYml0AAMQAGZhY2luZ19kaXJlY3Rpb24AAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:polished_blackstone_button", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQnAgAACAQAbmFtZSQAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfYnV0dG9uBAkAbmFtZV9oYXNojmxzQKS0S/EDCgBuZXR3b3JrX2lk3TQAAAoGAHN0YXRlcwESAGJ1dHRvbl9wcmVzc2VkX2JpdAADEABmYWNpbmdfZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:tripwire_hook", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSDAAAACAQAbmFtZRcAbWluZWNyYWZ0OnRyaXB3aXJlX2hvb2sECQBuYW1lX2hhc2gQdp+oGZLNnAMKAG5ldHdvcmtfaWR7KQAACgYAc3RhdGVzAQwAYXR0YWNoZWRfYml0AAMJAGRpcmVjdGlvbgAAAAABCwBwb3dlcmVkX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:wooden_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRIAAAACAQAbmFtZR8AbWluZWNyYWZ0Ondvb2Rlbl9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaGkGs5kCuA74AwoAbmV0d29ya19pZBM2AAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:spruce_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSZAQAACAQAbmFtZR8AbWluZWNyYWZ0OnNwcnVjZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNmwuq549fJKAwoAbmV0d29ya19pZBEYAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:birch_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSWAQAACAQAbmFtZR4AbWluZWNyYWZ0OmJpcmNoX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNorQkT9kDdlTwDCgBuZXR3b3JrX2lkNBcAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:jungle_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSYAQAACAQAbmFtZR8AbWluZWNyYWZ0Omp1bmdsZV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaJ7DcteCkb8/AwoAbmV0d29ya19pZIoXAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:acacia_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSVAQAACAQAbmFtZR8AbWluZWNyYWZ0OmFjYWNpYV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaC2frZtfoYqCAwoAbmV0d29ya19pZD4jAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:dark_oak_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAQAACAQAbmFtZSEAbWluZWNyYWZ0OmRhcmtfb2FrX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoHUCJsTy52pwDCgBuZXR3b3JrX2lkpSkAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:mangrove_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTpAgAACAQAbmFtZSEAbWluZWNyYWZ0Om1hbmdyb3ZlX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoiDsTfJaX100DCgBuZXR3b3JrX2lk/BkAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:cherry_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQZAwAACAQAbmFtZR8AbWluZWNyYWZ0OmNoZXJyeV9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaALMqYEZDUQHAwoAbmV0d29ya19pZJoAAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:bamboo_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQBAwAACAQAbmFtZR8AbWluZWNyYWZ0OmJhbWJvb19wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaNvxJ7NIAaqlAwoAbmV0d29ya19pZM8rAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:crimson_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQFAgAACAQAbmFtZSAAbWluZWNyYWZ0OmNyaW1zb25fcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2hqBDVDAd31/gMKAG5ldHdvcmtfaWQANwAACgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:warped_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQGAgAACAQAbmFtZR8AbWluZWNyYWZ0OndhcnBlZF9wcmVzc3VyZV9wbGF0ZQQJAG5hbWVfaGFzaBxFoQksWtYUAwoAbmV0d29ya19pZMECAAAKBgBzdGF0ZXMDDwByZWRzdG9uZV9zaWduYWwAAAAAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:stone_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWRGAAAACAQAbmFtZR4AbWluZWNyYWZ0OnN0b25lX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNounJuTBUTrU8DCgBuZXR3b3JrX2lkDhoAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:light_weighted_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSTAAAACAQAbmFtZScAbWluZWNyYWZ0OmxpZ2h0X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoOyOJkNxLtkEDCgBuZXR3b3JrX2lkqRcAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:heavy_weighted_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSUAAAACAQAbmFtZScAbWluZWNyYWZ0OmhlYXZ5X3dlaWdodGVkX3ByZXNzdXJlX3BsYXRlBAkAbmFtZV9oYXNoltgDmDvTajUDCgBuZXR3b3JrX2lkLQoAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:polished_blackstone_pressure_plate", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAgAACAQAbmFtZSwAbWluZWNyYWZ0OnBvbGlzaGVkX2JsYWNrc3RvbmVfcHJlc3N1cmVfcGxhdGUECQBuYW1lX2hhc2h65Ci6/CeGqwMKAG5ldHdvcmtfaWRxLAAACgYAc3RhdGVzAw8AcmVkc3RvbmVfc2lnbmFsAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:observer", + "block_state_b64": "CgAAAwgAYmxvY2tfaWT7AAAACAQAbmFtZRIAbWluZWNyYWZ0Om9ic2VydmVyBAkAbmFtZV9oYXNoYhlh1lpmHTgDCgBuZXR3b3JrX2lkdxUAAAoGAHN0YXRlcwgaAG1pbmVjcmFmdDpmYWNpbmdfZGlyZWN0aW9uBABkb3duAQsAcG93ZXJlZF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:daylight_detector", + "block_state_b64": "CgAAAwgAYmxvY2tfaWSXAAAACAQAbmFtZRsAbWluZWNyYWZ0OmRheWxpZ2h0X2RldGVjdG9yBAkAbmFtZV9oYXNoV0F0s7B7PVgDCgBuZXR3b3JrX2lkUhsAAAoGAHN0YXRlcwMPAHJlZHN0b25lX3NpZ25hbAAAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:repeater" + }, + { + "id": "minecraft:comparator" + }, + { + "id": "minecraft:hopper" + }, + { + "id": "minecraft:dropper", + "block_state_b64": "CgAAAwgAYmxvY2tfaWR9AAAACAQAbmFtZREAbWluZWNyYWZ0OmRyb3BwZXIECQBuYW1lX2hhc2joXP7XqU0l3QMKAG5ldHdvcmtfaWQTMwAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgMAAAABDQB0cmlnZ2VyZWRfYml0AAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:dispenser", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQXAAAACAQAbmFtZRMAbWluZWNyYWZ0OmRpc3BlbnNlcgQJAG5hbWVfaGFzaP1RR+zAbYP2AwoAbmV0d29ya19pZO81AAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAwAAAAENAHRyaWdnZXJlZF9iaXQAAAMHAHZlcnNpb24BPBQBAA==" + }, + { + "id": "minecraft:piston", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQhAAAACAQAbmFtZRAAbWluZWNyYWZ0OnBpc3RvbgQJAG5hbWVfaGFzaDs3AFh1fL0uAwoAbmV0d29ya19pZE0JAAAKBgBzdGF0ZXMDEABmYWNpbmdfZGlyZWN0aW9uAQAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:sticky_piston", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQdAAAACAQAbmFtZRcAbWluZWNyYWZ0OnN0aWNreV9waXN0b24ECQBuYW1lX2hhc2hPFJFJSiJ0ZQMKAG5ldHdvcmtfaWQrHAAACgYAc3RhdGVzAxAAZmFjaW5nX2RpcmVjdGlvbgEAAAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:tnt", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQuAAAACAQAbmFtZQ0AbWluZWNyYWZ0OnRudAQJAG5hbWVfaGFzaEYOHwCvJH29AwoAbmV0d29ya19pZIMuAAAKBgBzdGF0ZXMBFABhbGxvd191bmRlcndhdGVyX2JpdAABCwBleHBsb2RlX2JpdAAAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:name_tag" + }, + { + "id": "minecraft:loom", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTLAQAACAQAbmFtZQ4AbWluZWNyYWZ0Omxvb20ECQBuYW1lX2hhc2i7DKjAXNq8TAMKAG5ldHdvcmtfaWTVGQAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:banner" + }, + { + "id": "minecraft:banner", + "damage": 8 + }, + { + "id": "minecraft:banner", + "damage": 7 + }, + { + "id": "minecraft:banner", + "damage": 15 + }, + { + "id": "minecraft:banner", + "damage": 12 + }, + { + "id": "minecraft:banner", + "damage": 14 + }, + { + "id": "minecraft:banner", + "damage": 1 + }, + { + "id": "minecraft:banner", + "damage": 4 + }, + { + "id": "minecraft:banner", + "damage": 5 + }, + { + "id": "minecraft:banner", + "damage": 13 + }, + { + "id": "minecraft:banner", + "damage": 9 + }, + { + "id": "minecraft:banner", + "damage": 3 + }, + { + "id": "minecraft:banner", + "damage": 11 + }, + { + "id": "minecraft:banner", + "damage": 10 + }, + { + "id": "minecraft:banner", + "damage": 2 + }, + { + "id": "minecraft:banner", + "damage": 6 + }, + { + "id": "minecraft:banner", + "damage": 15, + "nbt_b64": "CgAAAwQAVHlwZQEAAAAA" + }, + { + "id": "minecraft:creeper_banner_pattern" + }, + { + "id": "minecraft:skull_banner_pattern" + }, + { + "id": "minecraft:flower_banner_pattern" + }, + { + "id": "minecraft:mojang_banner_pattern" + }, + { + "id": "minecraft:field_masoned_banner_pattern" + }, + { + "id": "minecraft:bordure_indented_banner_pattern" + }, + { + "id": "minecraft:piglin_banner_pattern" + }, + { + "id": "minecraft:globe_banner_pattern" + }, + { + "id": "minecraft:angler_pottery_sherd" + }, + { + "id": "minecraft:archer_pottery_sherd" + }, + { + "id": "minecraft:arms_up_pottery_sherd" + }, + { + "id": "minecraft:blade_pottery_sherd" + }, + { + "id": "minecraft:brewer_pottery_sherd" + }, + { + "id": "minecraft:burn_pottery_sherd" + }, + { + "id": "minecraft:danger_pottery_sherd" + }, + { + "id": "minecraft:explorer_pottery_sherd" + }, + { + "id": "minecraft:friend_pottery_sherd" + }, + { + "id": "minecraft:heart_pottery_sherd" + }, + { + "id": "minecraft:heartbreak_pottery_sherd" + }, + { + "id": "minecraft:howl_pottery_sherd" + }, + { + "id": "minecraft:miner_pottery_sherd" + }, + { + "id": "minecraft:mourner_pottery_sherd" + }, + { + "id": "minecraft:plenty_pottery_sherd" + }, + { + "id": "minecraft:prize_pottery_sherd" + }, + { + "id": "minecraft:sheaf_pottery_sherd" + }, + { + "id": "minecraft:shelter_pottery_sherd" + }, + { + "id": "minecraft:skull_pottery_sherd" + }, + { + "id": "minecraft:snort_pottery_sherd" + }, + { + "id": "minecraft:netherite_upgrade_smithing_template" + }, + { + "id": "minecraft:sentry_armor_trim_smithing_template" + }, + { + "id": "minecraft:vex_armor_trim_smithing_template" + }, + { + "id": "minecraft:wild_armor_trim_smithing_template" + }, + { + "id": "minecraft:coast_armor_trim_smithing_template" + }, + { + "id": "minecraft:dune_armor_trim_smithing_template" + }, + { + "id": "minecraft:wayfinder_armor_trim_smithing_template" + }, + { + "id": "minecraft:shaper_armor_trim_smithing_template" + }, + { + "id": "minecraft:raiser_armor_trim_smithing_template" + }, + { + "id": "minecraft:host_armor_trim_smithing_template" + }, + { + "id": "minecraft:ward_armor_trim_smithing_template" + }, + { + "id": "minecraft:silence_armor_trim_smithing_template" + }, + { + "id": "minecraft:tide_armor_trim_smithing_template" + }, + { + "id": "minecraft:snout_armor_trim_smithing_template" + }, + { + "id": "minecraft:rib_armor_trim_smithing_template" + }, + { + "id": "minecraft:eye_armor_trim_smithing_template" + }, + { + "id": "minecraft:spire_armor_trim_smithing_template" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwAAAAAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAABwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAIBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAHBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAPBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAMBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAOBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAABBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAEBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAFBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAANBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAJBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAADBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAALBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAKBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAACBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_rocket", + "nbt_b64": "CgAACgkARmlyZXdvcmtzCQoARXhwbG9zaW9ucwoBAAAABw0ARmlyZXdvcmtDb2xvcgEAAAAGBwwARmlyZXdvcmtGYWRlAAAAAAEPAEZpcmV3b3JrRmxpY2tlcgABDQBGaXJld29ya1RyYWlsAAEMAEZpcmV3b3JrVHlwZQAAAQYARmxpZ2h0AQAA" + }, + { + "id": "minecraft:firework_star", + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yIR0d/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 8, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yUk9H/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 7, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yl52d/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 15, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y8PDw/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 12, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9y2rM6/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 14, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yHYD5/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 1, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yJi6w/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 4, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABAcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqkQ8/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 5, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yuDKJ/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 13, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAADQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yvU7H/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 9, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACQcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yqovz/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 3, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yMlSD/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 11, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACwcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yPdj+/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 10, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAACgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yH8eA/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 2, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAAAgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9yFnxe/wA=" + }, + { + "id": "minecraft:firework_star", + "damage": 6, + "nbt_b64": "CgAACg0ARmlyZXdvcmtzSXRlbQcNAEZpcmV3b3JrQ29sb3IBAAAABgcMAEZpcmV3b3JrRmFkZQAAAAABDwBGaXJld29ya0ZsaWNrZXIAAQ0ARmlyZXdvcmtUcmFpbAABDABGaXJld29ya1R5cGUAAAMLAGN1c3RvbUNvbG9ynJwW/wA=" + }, + { + "id": "minecraft:chain" + }, + { + "id": "minecraft:target", + "block_state_b64": "CgAAAwgAYmxvY2tfaWTuAQAACAQAbmFtZRAAbWluZWNyYWZ0OnRhcmdldAQJAG5hbWVfaGFzaJc66SVbYlaxAwoAbmV0d29ya19pZBMtAAAKBgBzdGF0ZXMAAwcAdmVyc2lvbgE8FAEA" + }, + { + "id": "minecraft:decorated_pot", + "block_state_b64": "CgAAAwgAYmxvY2tfaWQmAwAACAQAbmFtZRcAbWluZWNyYWZ0OmRlY29yYXRlZF9wb3QECQBuYW1lX2hhc2jjQgckn8VTvwMKAG5ldHdvcmtfaWSWLgAACgYAc3RhdGVzAwkAZGlyZWN0aW9uAAAAAAADBwB2ZXJzaW9uATwUAQA=" + }, + { + "id": "minecraft:lodestone_compass" + }, + { + "id": "minecraft:wither_spawn_egg" + }, + { + "id": "minecraft:ender_dragon_spawn_egg" + } + ] +} \ No newline at end of file diff --git a/core/src/main/resources/bedrock/runtime_item_states.1_20_60.json b/core/src/main/resources/bedrock/runtime_item_states.1_20_60.json new file mode 100644 index 000000000..f8b3199e3 --- /dev/null +++ b/core/src/main/resources/bedrock/runtime_item_states.1_20_60.json @@ -0,0 +1,5998 @@ +[ + { + "name": "minecraft:acacia_boat", + "id": 382 + }, + { + "name": "minecraft:acacia_button", + "id": -140 + }, + { + "name": "minecraft:acacia_chest_boat", + "id": 651 + }, + { + "name": "minecraft:acacia_door", + "id": 565 + }, + { + "name": "minecraft:acacia_fence", + "id": -575 + }, + { + "name": "minecraft:acacia_fence_gate", + "id": 187 + }, + { + "name": "minecraft:acacia_hanging_sign", + "id": -504 + }, + { + "name": "minecraft:acacia_log", + "id": 162 + }, + { + "name": "minecraft:acacia_planks", + "id": -742 + }, + { + "name": "minecraft:acacia_pressure_plate", + "id": -150 + }, + { + "name": "minecraft:acacia_sign", + "id": 588 + }, + { + "name": "minecraft:acacia_stairs", + "id": 163 + }, + { + "name": "minecraft:acacia_standing_sign", + "id": -190 + }, + { + "name": "minecraft:acacia_trapdoor", + "id": -145 + }, + { + "name": "minecraft:acacia_wall_sign", + "id": -191 + }, + { + "name": "minecraft:activator_rail", + "id": 126 + }, + { + "name": "minecraft:agent_spawn_egg", + "id": 490 + }, + { + "name": "minecraft:air", + "id": -158 + }, + { + "name": "minecraft:allay_spawn_egg", + "id": 640 + }, + { + "name": "minecraft:allow", + "id": 210 + }, + { + "name": "minecraft:amethyst_block", + "id": -327 + }, + { + "name": "minecraft:amethyst_cluster", + "id": -329 + }, + { + "name": "minecraft:amethyst_shard", + "id": 633 + }, + { + "name": "minecraft:ancient_debris", + "id": -271 + }, + { + "name": "minecraft:andesite", + "id": -594 + }, + { + "name": "minecraft:andesite_stairs", + "id": -171 + }, + { + "name": "minecraft:angler_pottery_sherd", + "id": 665 + }, + { + "name": "minecraft:anvil", + "id": 145 + }, + { + "name": "minecraft:apple", + "id": 257 + }, + { + "name": "minecraft:archer_pottery_sherd", + "id": 666 + }, + { + "name": "minecraft:armadillo_scute", + "id": 707 + }, + { + "name": "minecraft:armadillo_spawn_egg", + "id": 706 + }, + { + "name": "minecraft:armor_stand", + "id": 561 + }, + { + "name": "minecraft:arms_up_pottery_sherd", + "id": 667 + }, + { + "name": "minecraft:arrow", + "id": 304 + }, + { + "name": "minecraft:axolotl_bucket", + "id": 372 + }, + { + "name": "minecraft:axolotl_spawn_egg", + "id": 505 + }, + { + "name": "minecraft:azalea", + "id": -337 + }, + { + "name": "minecraft:azalea_leaves", + "id": -324 + }, + { + "name": "minecraft:azalea_leaves_flowered", + "id": -325 + }, + { + "name": "minecraft:baked_potato", + "id": 282 + }, + { + "name": "minecraft:balloon", + "id": 607 + }, + { + "name": "minecraft:bamboo", + "id": -163 + }, + { + "name": "minecraft:bamboo_block", + "id": -527 + }, + { + "name": "minecraft:bamboo_button", + "id": -511 + }, + { + "name": "minecraft:bamboo_chest_raft", + "id": 663 + }, + { + "name": "minecraft:bamboo_door", + "id": -517 + }, + { + "name": "minecraft:bamboo_double_slab", + "id": -521 + }, + { + "name": "minecraft:bamboo_fence", + "id": -515 + }, + { + "name": "minecraft:bamboo_fence_gate", + "id": -516 + }, + { + "name": "minecraft:bamboo_hanging_sign", + "id": -522 + }, + { + "name": "minecraft:bamboo_mosaic", + "id": -509 + }, + { + "name": "minecraft:bamboo_mosaic_double_slab", + "id": -525 + }, + { + "name": "minecraft:bamboo_mosaic_slab", + "id": -524 + }, + { + "name": "minecraft:bamboo_mosaic_stairs", + "id": -523 + }, + { + "name": "minecraft:bamboo_planks", + "id": -510 + }, + { + "name": "minecraft:bamboo_pressure_plate", + "id": -514 + }, + { + "name": "minecraft:bamboo_raft", + "id": 662 + }, + { + "name": "minecraft:bamboo_sapling", + "id": -164 + }, + { + "name": "minecraft:bamboo_sign", + "id": 661 + }, + { + "name": "minecraft:bamboo_slab", + "id": -513 + }, + { + "name": "minecraft:bamboo_stairs", + "id": -512 + }, + { + "name": "minecraft:bamboo_standing_sign", + "id": -518 + }, + { + "name": "minecraft:bamboo_trapdoor", + "id": -520 + }, + { + "name": "minecraft:bamboo_wall_sign", + "id": -519 + }, + { + "name": "minecraft:banner", + "id": 576 + }, + { + "name": "minecraft:banner_pattern", + "id": 725 + }, + { + "name": "minecraft:barrel", + "id": -203 + }, + { + "name": "minecraft:barrier", + "id": -161 + }, + { + "name": "minecraft:basalt", + "id": -234 + }, + { + "name": "minecraft:bat_spawn_egg", + "id": 456 + }, + { + "name": "minecraft:beacon", + "id": 138 + }, + { + "name": "minecraft:bed", + "id": 421 + }, + { + "name": "minecraft:bedrock", + "id": 7 + }, + { + "name": "minecraft:bee_nest", + "id": -218 + }, + { + "name": "minecraft:bee_spawn_egg", + "id": 497 + }, + { + "name": "minecraft:beef", + "id": 274 + }, + { + "name": "minecraft:beehive", + "id": -219 + }, + { + "name": "minecraft:beetroot", + "id": 286 + }, + { + "name": "minecraft:beetroot_seeds", + "id": 296 + }, + { + "name": "minecraft:beetroot_soup", + "id": 287 + }, + { + "name": "minecraft:bell", + "id": -206 + }, + { + "name": "minecraft:big_dripleaf", + "id": -323 + }, + { + "name": "minecraft:birch_boat", + "id": 379 + }, + { + "name": "minecraft:birch_button", + "id": -141 + }, + { + "name": "minecraft:birch_chest_boat", + "id": 648 + }, + { + "name": "minecraft:birch_door", + "id": 563 + }, + { + "name": "minecraft:birch_fence", + "id": -576 + }, + { + "name": "minecraft:birch_fence_gate", + "id": 184 + }, + { + "name": "minecraft:birch_hanging_sign", + "id": -502 + }, + { + "name": "minecraft:birch_log", + "id": -570 + }, + { + "name": "minecraft:birch_planks", + "id": -740 + }, + { + "name": "minecraft:birch_pressure_plate", + "id": -151 + }, + { + "name": "minecraft:birch_sign", + "id": 586 + }, + { + "name": "minecraft:birch_stairs", + "id": 135 + }, + { + "name": "minecraft:birch_standing_sign", + "id": -186 + }, + { + "name": "minecraft:birch_trapdoor", + "id": -146 + }, + { + "name": "minecraft:birch_wall_sign", + "id": -187 + }, + { + "name": "minecraft:black_candle", + "id": -428 + }, + { + "name": "minecraft:black_candle_cake", + "id": -445 + }, + { + "name": "minecraft:black_carpet", + "id": -611 + }, + { + "name": "minecraft:black_concrete", + "id": -642 + }, + { + "name": "minecraft:black_concrete_powder", + "id": -723 + }, + { + "name": "minecraft:black_dye", + "id": 398 + }, + { + "name": "minecraft:black_glazed_terracotta", + "id": 235 + }, + { + "name": "minecraft:black_shulker_box", + "id": -627 + }, + { + "name": "minecraft:black_stained_glass", + "id": -687 + }, + { + "name": "minecraft:black_stained_glass_pane", + "id": -657 + }, + { + "name": "minecraft:black_terracotta", + "id": -738 + }, + { + "name": "minecraft:black_wool", + "id": -554 + }, + { + "name": "minecraft:blackstone", + "id": -273 + }, + { + "name": "minecraft:blackstone_double_slab", + "id": -283 + }, + { + "name": "minecraft:blackstone_slab", + "id": -282 + }, + { + "name": "minecraft:blackstone_stairs", + "id": -276 + }, + { + "name": "minecraft:blackstone_wall", + "id": -277 + }, + { + "name": "minecraft:blade_pottery_sherd", + "id": 668 + }, + { + "name": "minecraft:blast_furnace", + "id": -196 + }, + { + "name": "minecraft:blaze_powder", + "id": 432 + }, + { + "name": "minecraft:blaze_rod", + "id": 426 + }, + { + "name": "minecraft:blaze_spawn_egg", + "id": 459 + }, + { + "name": "minecraft:bleach", + "id": 605 + }, + { + "name": "minecraft:blue_candle", + "id": -424 + }, + { + "name": "minecraft:blue_candle_cake", + "id": -441 + }, + { + "name": "minecraft:blue_carpet", + "id": -607 + }, + { + "name": "minecraft:blue_concrete", + "id": -638 + }, + { + "name": "minecraft:blue_concrete_powder", + "id": -719 + }, + { + "name": "minecraft:blue_dye", + "id": 402 + }, + { + "name": "minecraft:blue_glazed_terracotta", + "id": 231 + }, + { + "name": "minecraft:blue_ice", + "id": -11 + }, + { + "name": "minecraft:blue_shulker_box", + "id": -623 + }, + { + "name": "minecraft:blue_stained_glass", + "id": -683 + }, + { + "name": "minecraft:blue_stained_glass_pane", + "id": -653 + }, + { + "name": "minecraft:blue_terracotta", + "id": -734 + }, + { + "name": "minecraft:blue_wool", + "id": -563 + }, + { + "name": "minecraft:boat", + "id": 723 + }, + { + "name": "minecraft:bone", + "id": 418 + }, + { + "name": "minecraft:bone_block", + "id": 216 + }, + { + "name": "minecraft:bone_meal", + "id": 414 + }, + { + "name": "minecraft:book", + "id": 390 + }, + { + "name": "minecraft:bookshelf", + "id": 47 + }, + { + "name": "minecraft:border_block", + "id": 212 + }, + { + "name": "minecraft:bordure_indented_banner_pattern", + "id": 595 + }, + { + "name": "minecraft:bow", + "id": 303 + }, + { + "name": "minecraft:bowl", + "id": 324 + }, + { + "name": "minecraft:brain_coral", + "id": -581 + }, + { + "name": "minecraft:bread", + "id": 262 + }, + { + "name": "minecraft:breeze_spawn_egg", + "id": 504 + }, + { + "name": "minecraft:brewer_pottery_sherd", + "id": 669 + }, + { + "name": "minecraft:brewing_stand", + "id": 434 + }, + { + "name": "minecraft:brick", + "id": 386 + }, + { + "name": "minecraft:brick_block", + "id": 45 + }, + { + "name": "minecraft:brick_stairs", + "id": 108 + }, + { + "name": "minecraft:brown_candle", + "id": -425 + }, + { + "name": "minecraft:brown_candle_cake", + "id": -442 + }, + { + "name": "minecraft:brown_carpet", + "id": -608 + }, + { + "name": "minecraft:brown_concrete", + "id": -639 + }, + { + "name": "minecraft:brown_concrete_powder", + "id": -720 + }, + { + "name": "minecraft:brown_dye", + "id": 401 + }, + { + "name": "minecraft:brown_glazed_terracotta", + "id": 232 + }, + { + "name": "minecraft:brown_mushroom", + "id": 39 + }, + { + "name": "minecraft:brown_mushroom_block", + "id": 99 + }, + { + "name": "minecraft:brown_shulker_box", + "id": -624 + }, + { + "name": "minecraft:brown_stained_glass", + "id": -684 + }, + { + "name": "minecraft:brown_stained_glass_pane", + "id": -654 + }, + { + "name": "minecraft:brown_terracotta", + "id": -735 + }, + { + "name": "minecraft:brown_wool", + "id": -555 + }, + { + "name": "minecraft:brush", + "id": 685 + }, + { + "name": "minecraft:bubble_column", + "id": -160 + }, + { + "name": "minecraft:bubble_coral", + "id": -582 + }, + { + "name": "minecraft:bucket", + "id": 363 + }, + { + "name": "minecraft:budding_amethyst", + "id": -328 + }, + { + "name": "minecraft:burn_pottery_sherd", + "id": 670 + }, + { + "name": "minecraft:cactus", + "id": 81 + }, + { + "name": "minecraft:cake", + "id": 420 + }, + { + "name": "minecraft:calcite", + "id": -326 + }, + { + "name": "minecraft:calibrated_sculk_sensor", + "id": -580 + }, + { + "name": "minecraft:camel_spawn_egg", + "id": 664 + }, + { + "name": "minecraft:camera", + "id": 602 + }, + { + "name": "minecraft:campfire", + "id": 598 + }, + { + "name": "minecraft:candle", + "id": -412 + }, + { + "name": "minecraft:candle_cake", + "id": -429 + }, + { + "name": "minecraft:carpet", + "id": 710 + }, + { + "name": "minecraft:carrot", + "id": 280 + }, + { + "name": "minecraft:carrot_on_a_stick", + "id": 526 + }, + { + "name": "minecraft:carrots", + "id": 141 + }, + { + "name": "minecraft:cartography_table", + "id": -200 + }, + { + "name": "minecraft:carved_pumpkin", + "id": -155 + }, + { + "name": "minecraft:cat_spawn_egg", + "id": 491 + }, + { + "name": "minecraft:cauldron", + "id": 435 + }, + { + "name": "minecraft:cave_spider_spawn_egg", + "id": 460 + }, + { + "name": "minecraft:cave_vines", + "id": -322 + }, + { + "name": "minecraft:cave_vines_body_with_berries", + "id": -375 + }, + { + "name": "minecraft:cave_vines_head_with_berries", + "id": -376 + }, + { + "name": "minecraft:chain", + "id": 628 + }, + { + "name": "minecraft:chain_command_block", + "id": 189 + }, + { + "name": "minecraft:chainmail_boots", + "id": 345 + }, + { + "name": "minecraft:chainmail_chestplate", + "id": 343 + }, + { + "name": "minecraft:chainmail_helmet", + "id": 342 + }, + { + "name": "minecraft:chainmail_leggings", + "id": 344 + }, + { + "name": "minecraft:charcoal", + "id": 306 + }, + { + "name": "minecraft:chemical_heat", + "id": 192 + }, + { + "name": "minecraft:chemistry_table", + "id": 238 + }, + { + "name": "minecraft:cherry_boat", + "id": 658 + }, + { + "name": "minecraft:cherry_button", + "id": -530 + }, + { + "name": "minecraft:cherry_chest_boat", + "id": 659 + }, + { + "name": "minecraft:cherry_door", + "id": -531 + }, + { + "name": "minecraft:cherry_double_slab", + "id": -540 + }, + { + "name": "minecraft:cherry_fence", + "id": -532 + }, + { + "name": "minecraft:cherry_fence_gate", + "id": -533 + }, + { + "name": "minecraft:cherry_hanging_sign", + "id": -534 + }, + { + "name": "minecraft:cherry_leaves", + "id": -548 + }, + { + "name": "minecraft:cherry_log", + "id": -536 + }, + { + "name": "minecraft:cherry_planks", + "id": -537 + }, + { + "name": "minecraft:cherry_pressure_plate", + "id": -538 + }, + { + "name": "minecraft:cherry_sapling", + "id": -547 + }, + { + "name": "minecraft:cherry_sign", + "id": 660 + }, + { + "name": "minecraft:cherry_slab", + "id": -539 + }, + { + "name": "minecraft:cherry_stairs", + "id": -541 + }, + { + "name": "minecraft:cherry_standing_sign", + "id": -542 + }, + { + "name": "minecraft:cherry_trapdoor", + "id": -543 + }, + { + "name": "minecraft:cherry_wall_sign", + "id": -544 + }, + { + "name": "minecraft:cherry_wood", + "id": -546 + }, + { + "name": "minecraft:chest", + "id": 54 + }, + { + "name": "minecraft:chest_boat", + "id": 654 + }, + { + "name": "minecraft:chest_minecart", + "id": 392 + }, + { + "name": "minecraft:chicken", + "id": 276 + }, + { + "name": "minecraft:chicken_spawn_egg", + "id": 438 + }, + { + "name": "minecraft:chiseled_bookshelf", + "id": -526 + }, + { + "name": "minecraft:chiseled_copper", + "id": -760 + }, + { + "name": "minecraft:chiseled_deepslate", + "id": -395 + }, + { + "name": "minecraft:chiseled_nether_bricks", + "id": -302 + }, + { + "name": "minecraft:chiseled_polished_blackstone", + "id": -279 + }, + { + "name": "minecraft:chiseled_tuff", + "id": -753 + }, + { + "name": "minecraft:chiseled_tuff_bricks", + "id": -759 + }, + { + "name": "minecraft:chorus_flower", + "id": 200 + }, + { + "name": "minecraft:chorus_fruit", + "id": 567 + }, + { + "name": "minecraft:chorus_plant", + "id": 240 + }, + { + "name": "minecraft:clay", + "id": 82 + }, + { + "name": "minecraft:clay_ball", + "id": 387 + }, + { + "name": "minecraft:client_request_placeholder_block", + "id": -465 + }, + { + "name": "minecraft:clock", + "id": 396 + }, + { + "name": "minecraft:coal", + "id": 305 + }, + { + "name": "minecraft:coal_block", + "id": 173 + }, + { + "name": "minecraft:coal_ore", + "id": 16 + }, + { + "name": "minecraft:coast_armor_trim_smithing_template", + "id": 689 + }, + { + "name": "minecraft:cobbled_deepslate", + "id": -379 + }, + { + "name": "minecraft:cobbled_deepslate_double_slab", + "id": -396 + }, + { + "name": "minecraft:cobbled_deepslate_slab", + "id": -380 + }, + { + "name": "minecraft:cobbled_deepslate_stairs", + "id": -381 + }, + { + "name": "minecraft:cobbled_deepslate_wall", + "id": -382 + }, + { + "name": "minecraft:cobblestone", + "id": 4 + }, + { + "name": "minecraft:cobblestone_wall", + "id": 139 + }, + { + "name": "minecraft:cocoa", + "id": 127 + }, + { + "name": "minecraft:cocoa_beans", + "id": 415 + }, + { + "name": "minecraft:cod", + "id": 265 + }, + { + "name": "minecraft:cod_bucket", + "id": 367 + }, + { + "name": "minecraft:cod_spawn_egg", + "id": 483 + }, + { + "name": "minecraft:colored_torch_bp", + "id": 204 + }, + { + "name": "minecraft:colored_torch_rg", + "id": 202 + }, + { + "name": "minecraft:command_block", + "id": 137 + }, + { + "name": "minecraft:command_block_minecart", + "id": 572 + }, + { + "name": "minecraft:comparator", + "id": 531 + }, + { + "name": "minecraft:compass", + "id": 394 + }, + { + "name": "minecraft:composter", + "id": -213 + }, + { + "name": "minecraft:compound", + "id": 603 + }, + { + "name": "minecraft:concrete", + "id": 716 + }, + { + "name": "minecraft:concrete_powder", + "id": 717 + }, + { + "name": "minecraft:conduit", + "id": -157 + }, + { + "name": "minecraft:cooked_beef", + "id": 275 + }, + { + "name": "minecraft:cooked_chicken", + "id": 277 + }, + { + "name": "minecraft:cooked_cod", + "id": 269 + }, + { + "name": "minecraft:cooked_mutton", + "id": 560 + }, + { + "name": "minecraft:cooked_porkchop", + "id": 264 + }, + { + "name": "minecraft:cooked_rabbit", + "id": 290 + }, + { + "name": "minecraft:cooked_salmon", + "id": 270 + }, + { + "name": "minecraft:cookie", + "id": 272 + }, + { + "name": "minecraft:copper_block", + "id": -340 + }, + { + "name": "minecraft:copper_bulb", + "id": -776 + }, + { + "name": "minecraft:copper_door", + "id": -784 + }, + { + "name": "minecraft:copper_grate", + "id": -768 + }, + { + "name": "minecraft:copper_ingot", + "id": 513 + }, + { + "name": "minecraft:copper_ore", + "id": -311 + }, + { + "name": "minecraft:copper_trapdoor", + "id": -792 + }, + { + "name": "minecraft:coral", + "id": 714 + }, + { + "name": "minecraft:coral_block", + "id": -132 + }, + { + "name": "minecraft:coral_fan", + "id": -133 + }, + { + "name": "minecraft:coral_fan_dead", + "id": -134 + }, + { + "name": "minecraft:coral_fan_hang", + "id": -135 + }, + { + "name": "minecraft:coral_fan_hang2", + "id": -136 + }, + { + "name": "minecraft:coral_fan_hang3", + "id": -137 + }, + { + "name": "minecraft:cow_spawn_egg", + "id": 439 + }, + { + "name": "minecraft:cracked_deepslate_bricks", + "id": -410 + }, + { + "name": "minecraft:cracked_deepslate_tiles", + "id": -409 + }, + { + "name": "minecraft:cracked_nether_bricks", + "id": -303 + }, + { + "name": "minecraft:cracked_polished_blackstone_bricks", + "id": -280 + }, + { + "name": "minecraft:crafter", + "id": -313 + }, + { + "name": "minecraft:crafting_table", + "id": 58 + }, + { + "name": "minecraft:creeper_banner_pattern", + "id": 591 + }, + { + "name": "minecraft:creeper_spawn_egg", + "id": 444 + }, + { + "name": "minecraft:crimson_button", + "id": -260 + }, + { + "name": "minecraft:crimson_door", + "id": 625 + }, + { + "name": "minecraft:crimson_double_slab", + "id": -266 + }, + { + "name": "minecraft:crimson_fence", + "id": -256 + }, + { + "name": "minecraft:crimson_fence_gate", + "id": -258 + }, + { + "name": "minecraft:crimson_fungus", + "id": -228 + }, + { + "name": "minecraft:crimson_hanging_sign", + "id": -506 + }, + { + "name": "minecraft:crimson_hyphae", + "id": -299 + }, + { + "name": "minecraft:crimson_nylium", + "id": -232 + }, + { + "name": "minecraft:crimson_planks", + "id": -242 + }, + { + "name": "minecraft:crimson_pressure_plate", + "id": -262 + }, + { + "name": "minecraft:crimson_roots", + "id": -223 + }, + { + "name": "minecraft:crimson_sign", + "id": 623 + }, + { + "name": "minecraft:crimson_slab", + "id": -264 + }, + { + "name": "minecraft:crimson_stairs", + "id": -254 + }, + { + "name": "minecraft:crimson_standing_sign", + "id": -250 + }, + { + "name": "minecraft:crimson_stem", + "id": -225 + }, + { + "name": "minecraft:crimson_trapdoor", + "id": -246 + }, + { + "name": "minecraft:crimson_wall_sign", + "id": -252 + }, + { + "name": "minecraft:crossbow", + "id": 584 + }, + { + "name": "minecraft:crying_obsidian", + "id": -289 + }, + { + "name": "minecraft:cut_copper", + "id": -347 + }, + { + "name": "minecraft:cut_copper_slab", + "id": -361 + }, + { + "name": "minecraft:cut_copper_stairs", + "id": -354 + }, + { + "name": "minecraft:cyan_candle", + "id": -422 + }, + { + "name": "minecraft:cyan_candle_cake", + "id": -439 + }, + { + "name": "minecraft:cyan_carpet", + "id": -605 + }, + { + "name": "minecraft:cyan_concrete", + "id": -636 + }, + { + "name": "minecraft:cyan_concrete_powder", + "id": -717 + }, + { + "name": "minecraft:cyan_dye", + "id": 404 + }, + { + "name": "minecraft:cyan_glazed_terracotta", + "id": 229 + }, + { + "name": "minecraft:cyan_shulker_box", + "id": -621 + }, + { + "name": "minecraft:cyan_stained_glass", + "id": -681 + }, + { + "name": "minecraft:cyan_stained_glass_pane", + "id": -651 + }, + { + "name": "minecraft:cyan_terracotta", + "id": -732 + }, + { + "name": "minecraft:cyan_wool", + "id": -561 + }, + { + "name": "minecraft:danger_pottery_sherd", + "id": 671 + }, + { + "name": "minecraft:dark_oak_boat", + "id": 383 + }, + { + "name": "minecraft:dark_oak_button", + "id": -142 + }, + { + "name": "minecraft:dark_oak_chest_boat", + "id": 652 + }, + { + "name": "minecraft:dark_oak_door", + "id": 566 + }, + { + "name": "minecraft:dark_oak_fence", + "id": -577 + }, + { + "name": "minecraft:dark_oak_fence_gate", + "id": 186 + }, + { + "name": "minecraft:dark_oak_hanging_sign", + "id": -505 + }, + { + "name": "minecraft:dark_oak_log", + "id": -572 + }, + { + "name": "minecraft:dark_oak_planks", + "id": -743 + }, + { + "name": "minecraft:dark_oak_pressure_plate", + "id": -152 + }, + { + "name": "minecraft:dark_oak_sign", + "id": 589 + }, + { + "name": "minecraft:dark_oak_stairs", + "id": 164 + }, + { + "name": "minecraft:dark_oak_trapdoor", + "id": -147 + }, + { + "name": "minecraft:dark_prismarine_stairs", + "id": -3 + }, + { + "name": "minecraft:darkoak_standing_sign", + "id": -192 + }, + { + "name": "minecraft:darkoak_wall_sign", + "id": -193 + }, + { + "name": "minecraft:daylight_detector", + "id": 151 + }, + { + "name": "minecraft:daylight_detector_inverted", + "id": 178 + }, + { + "name": "minecraft:dead_brain_coral", + "id": -586 + }, + { + "name": "minecraft:dead_bubble_coral", + "id": -587 + }, + { + "name": "minecraft:dead_fire_coral", + "id": -588 + }, + { + "name": "minecraft:dead_horn_coral", + "id": -589 + }, + { + "name": "minecraft:dead_tube_coral", + "id": -585 + }, + { + "name": "minecraft:deadbush", + "id": 32 + }, + { + "name": "minecraft:decorated_pot", + "id": -551 + }, + { + "name": "minecraft:deepslate", + "id": -378 + }, + { + "name": "minecraft:deepslate_brick_double_slab", + "id": -399 + }, + { + "name": "minecraft:deepslate_brick_slab", + "id": -392 + }, + { + "name": "minecraft:deepslate_brick_stairs", + "id": -393 + }, + { + "name": "minecraft:deepslate_brick_wall", + "id": -394 + }, + { + "name": "minecraft:deepslate_bricks", + "id": -391 + }, + { + "name": "minecraft:deepslate_coal_ore", + "id": -406 + }, + { + "name": "minecraft:deepslate_copper_ore", + "id": -408 + }, + { + "name": "minecraft:deepslate_diamond_ore", + "id": -405 + }, + { + "name": "minecraft:deepslate_emerald_ore", + "id": -407 + }, + { + "name": "minecraft:deepslate_gold_ore", + "id": -402 + }, + { + "name": "minecraft:deepslate_iron_ore", + "id": -401 + }, + { + "name": "minecraft:deepslate_lapis_ore", + "id": -400 + }, + { + "name": "minecraft:deepslate_redstone_ore", + "id": -403 + }, + { + "name": "minecraft:deepslate_tile_double_slab", + "id": -398 + }, + { + "name": "minecraft:deepslate_tile_slab", + "id": -388 + }, + { + "name": "minecraft:deepslate_tile_stairs", + "id": -389 + }, + { + "name": "minecraft:deepslate_tile_wall", + "id": -390 + }, + { + "name": "minecraft:deepslate_tiles", + "id": -387 + }, + { + "name": "minecraft:deny", + "id": 211 + }, + { + "name": "minecraft:detector_rail", + "id": 28 + }, + { + "name": "minecraft:diamond", + "id": 307 + }, + { + "name": "minecraft:diamond_axe", + "id": 322 + }, + { + "name": "minecraft:diamond_block", + "id": 57 + }, + { + "name": "minecraft:diamond_boots", + "id": 353 + }, + { + "name": "minecraft:diamond_chestplate", + "id": 351 + }, + { + "name": "minecraft:diamond_helmet", + "id": 350 + }, + { + "name": "minecraft:diamond_hoe", + "id": 335 + }, + { + "name": "minecraft:diamond_horse_armor", + "id": 542 + }, + { + "name": "minecraft:diamond_leggings", + "id": 352 + }, + { + "name": "minecraft:diamond_ore", + "id": 56 + }, + { + "name": "minecraft:diamond_pickaxe", + "id": 321 + }, + { + "name": "minecraft:diamond_shovel", + "id": 320 + }, + { + "name": "minecraft:diamond_sword", + "id": 319 + }, + { + "name": "minecraft:diorite", + "id": -592 + }, + { + "name": "minecraft:diorite_stairs", + "id": -170 + }, + { + "name": "minecraft:dirt", + "id": 3 + }, + { + "name": "minecraft:dirt_with_roots", + "id": -318 + }, + { + "name": "minecraft:disc_fragment_5", + "id": 646 + }, + { + "name": "minecraft:dispenser", + "id": 23 + }, + { + "name": "minecraft:dolphin_spawn_egg", + "id": 487 + }, + { + "name": "minecraft:donkey_spawn_egg", + "id": 468 + }, + { + "name": "minecraft:double_cut_copper_slab", + "id": -368 + }, + { + "name": "minecraft:double_plant", + "id": 175 + }, + { + "name": "minecraft:double_stone_block_slab", + "id": 43 + }, + { + "name": "minecraft:double_stone_block_slab2", + "id": 181 + }, + { + "name": "minecraft:double_stone_block_slab3", + "id": -167 + }, + { + "name": "minecraft:double_stone_block_slab4", + "id": -168 + }, + { + "name": "minecraft:double_wooden_slab", + "id": 157 + }, + { + "name": "minecraft:dragon_breath", + "id": 569 + }, + { + "name": "minecraft:dragon_egg", + "id": 122 + }, + { + "name": "minecraft:dried_kelp", + "id": 271 + }, + { + "name": "minecraft:dried_kelp_block", + "id": -139 + }, + { + "name": "minecraft:dripstone_block", + "id": -317 + }, + { + "name": "minecraft:dropper", + "id": 125 + }, + { + "name": "minecraft:drowned_spawn_egg", + "id": 486 + }, + { + "name": "minecraft:dune_armor_trim_smithing_template", + "id": 688 + }, + { + "name": "minecraft:dye", + "id": 724 + }, + { + "name": "minecraft:echo_shard", + "id": 656 + }, + { + "name": "minecraft:egg", + "id": 393 + }, + { + "name": "minecraft:elder_guardian_spawn_egg", + "id": 474 + }, + { + "name": "minecraft:element_0", + "id": 36 + }, + { + "name": "minecraft:element_1", + "id": -12 + }, + { + "name": "minecraft:element_10", + "id": -21 + }, + { + "name": "minecraft:element_100", + "id": -111 + }, + { + "name": "minecraft:element_101", + "id": -112 + }, + { + "name": "minecraft:element_102", + "id": -113 + }, + { + "name": "minecraft:element_103", + "id": -114 + }, + { + "name": "minecraft:element_104", + "id": -115 + }, + { + "name": "minecraft:element_105", + "id": -116 + }, + { + "name": "minecraft:element_106", + "id": -117 + }, + { + "name": "minecraft:element_107", + "id": -118 + }, + { + "name": "minecraft:element_108", + "id": -119 + }, + { + "name": "minecraft:element_109", + "id": -120 + }, + { + "name": "minecraft:element_11", + "id": -22 + }, + { + "name": "minecraft:element_110", + "id": -121 + }, + { + "name": "minecraft:element_111", + "id": -122 + }, + { + "name": "minecraft:element_112", + "id": -123 + }, + { + "name": "minecraft:element_113", + "id": -124 + }, + { + "name": "minecraft:element_114", + "id": -125 + }, + { + "name": "minecraft:element_115", + "id": -126 + }, + { + "name": "minecraft:element_116", + "id": -127 + }, + { + "name": "minecraft:element_117", + "id": -128 + }, + { + "name": "minecraft:element_118", + "id": -129 + }, + { + "name": "minecraft:element_12", + "id": -23 + }, + { + "name": "minecraft:element_13", + "id": -24 + }, + { + "name": "minecraft:element_14", + "id": -25 + }, + { + "name": "minecraft:element_15", + "id": -26 + }, + { + "name": "minecraft:element_16", + "id": -27 + }, + { + "name": "minecraft:element_17", + "id": -28 + }, + { + "name": "minecraft:element_18", + "id": -29 + }, + { + "name": "minecraft:element_19", + "id": -30 + }, + { + "name": "minecraft:element_2", + "id": -13 + }, + { + "name": "minecraft:element_20", + "id": -31 + }, + { + "name": "minecraft:element_21", + "id": -32 + }, + { + "name": "minecraft:element_22", + "id": -33 + }, + { + "name": "minecraft:element_23", + "id": -34 + }, + { + "name": "minecraft:element_24", + "id": -35 + }, + { + "name": "minecraft:element_25", + "id": -36 + }, + { + "name": "minecraft:element_26", + "id": -37 + }, + { + "name": "minecraft:element_27", + "id": -38 + }, + { + "name": "minecraft:element_28", + "id": -39 + }, + { + "name": "minecraft:element_29", + "id": -40 + }, + { + "name": "minecraft:element_3", + "id": -14 + }, + { + "name": "minecraft:element_30", + "id": -41 + }, + { + "name": "minecraft:element_31", + "id": -42 + }, + { + "name": "minecraft:element_32", + "id": -43 + }, + { + "name": "minecraft:element_33", + "id": -44 + }, + { + "name": "minecraft:element_34", + "id": -45 + }, + { + "name": "minecraft:element_35", + "id": -46 + }, + { + "name": "minecraft:element_36", + "id": -47 + }, + { + "name": "minecraft:element_37", + "id": -48 + }, + { + "name": "minecraft:element_38", + "id": -49 + }, + { + "name": "minecraft:element_39", + "id": -50 + }, + { + "name": "minecraft:element_4", + "id": -15 + }, + { + "name": "minecraft:element_40", + "id": -51 + }, + { + "name": "minecraft:element_41", + "id": -52 + }, + { + "name": "minecraft:element_42", + "id": -53 + }, + { + "name": "minecraft:element_43", + "id": -54 + }, + { + "name": "minecraft:element_44", + "id": -55 + }, + { + "name": "minecraft:element_45", + "id": -56 + }, + { + "name": "minecraft:element_46", + "id": -57 + }, + { + "name": "minecraft:element_47", + "id": -58 + }, + { + "name": "minecraft:element_48", + "id": -59 + }, + { + "name": "minecraft:element_49", + "id": -60 + }, + { + "name": "minecraft:element_5", + "id": -16 + }, + { + "name": "minecraft:element_50", + "id": -61 + }, + { + "name": "minecraft:element_51", + "id": -62 + }, + { + "name": "minecraft:element_52", + "id": -63 + }, + { + "name": "minecraft:element_53", + "id": -64 + }, + { + "name": "minecraft:element_54", + "id": -65 + }, + { + "name": "minecraft:element_55", + "id": -66 + }, + { + "name": "minecraft:element_56", + "id": -67 + }, + { + "name": "minecraft:element_57", + "id": -68 + }, + { + "name": "minecraft:element_58", + "id": -69 + }, + { + "name": "minecraft:element_59", + "id": -70 + }, + { + "name": "minecraft:element_6", + "id": -17 + }, + { + "name": "minecraft:element_60", + "id": -71 + }, + { + "name": "minecraft:element_61", + "id": -72 + }, + { + "name": "minecraft:element_62", + "id": -73 + }, + { + "name": "minecraft:element_63", + "id": -74 + }, + { + "name": "minecraft:element_64", + "id": -75 + }, + { + "name": "minecraft:element_65", + "id": -76 + }, + { + "name": "minecraft:element_66", + "id": -77 + }, + { + "name": "minecraft:element_67", + "id": -78 + }, + { + "name": "minecraft:element_68", + "id": -79 + }, + { + "name": "minecraft:element_69", + "id": -80 + }, + { + "name": "minecraft:element_7", + "id": -18 + }, + { + "name": "minecraft:element_70", + "id": -81 + }, + { + "name": "minecraft:element_71", + "id": -82 + }, + { + "name": "minecraft:element_72", + "id": -83 + }, + { + "name": "minecraft:element_73", + "id": -84 + }, + { + "name": "minecraft:element_74", + "id": -85 + }, + { + "name": "minecraft:element_75", + "id": -86 + }, + { + "name": "minecraft:element_76", + "id": -87 + }, + { + "name": "minecraft:element_77", + "id": -88 + }, + { + "name": "minecraft:element_78", + "id": -89 + }, + { + "name": "minecraft:element_79", + "id": -90 + }, + { + "name": "minecraft:element_8", + "id": -19 + }, + { + "name": "minecraft:element_80", + "id": -91 + }, + { + "name": "minecraft:element_81", + "id": -92 + }, + { + "name": "minecraft:element_82", + "id": -93 + }, + { + "name": "minecraft:element_83", + "id": -94 + }, + { + "name": "minecraft:element_84", + "id": -95 + }, + { + "name": "minecraft:element_85", + "id": -96 + }, + { + "name": "minecraft:element_86", + "id": -97 + }, + { + "name": "minecraft:element_87", + "id": -98 + }, + { + "name": "minecraft:element_88", + "id": -99 + }, + { + "name": "minecraft:element_89", + "id": -100 + }, + { + "name": "minecraft:element_9", + "id": -20 + }, + { + "name": "minecraft:element_90", + "id": -101 + }, + { + "name": "minecraft:element_91", + "id": -102 + }, + { + "name": "minecraft:element_92", + "id": -103 + }, + { + "name": "minecraft:element_93", + "id": -104 + }, + { + "name": "minecraft:element_94", + "id": -105 + }, + { + "name": "minecraft:element_95", + "id": -106 + }, + { + "name": "minecraft:element_96", + "id": -107 + }, + { + "name": "minecraft:element_97", + "id": -108 + }, + { + "name": "minecraft:element_98", + "id": -109 + }, + { + "name": "minecraft:element_99", + "id": -110 + }, + { + "name": "minecraft:elytra", + "id": 573 + }, + { + "name": "minecraft:emerald", + "id": 521 + }, + { + "name": "minecraft:emerald_block", + "id": 133 + }, + { + "name": "minecraft:emerald_ore", + "id": 129 + }, + { + "name": "minecraft:empty_map", + "id": 524 + }, + { + "name": "minecraft:enchanted_book", + "id": 530 + }, + { + "name": "minecraft:enchanted_golden_apple", + "id": 260 + }, + { + "name": "minecraft:enchanting_table", + "id": 116 + }, + { + "name": "minecraft:end_brick_stairs", + "id": -178 + }, + { + "name": "minecraft:end_bricks", + "id": 206 + }, + { + "name": "minecraft:end_crystal", + "id": 727 + }, + { + "name": "minecraft:end_gateway", + "id": 209 + }, + { + "name": "minecraft:end_portal", + "id": 119 + }, + { + "name": "minecraft:end_portal_frame", + "id": 120 + }, + { + "name": "minecraft:end_rod", + "id": 208 + }, + { + "name": "minecraft:end_stone", + "id": 121 + }, + { + "name": "minecraft:ender_chest", + "id": 130 + }, + { + "name": "minecraft:ender_dragon_spawn_egg", + "id": 510 + }, + { + "name": "minecraft:ender_eye", + "id": 436 + }, + { + "name": "minecraft:ender_pearl", + "id": 425 + }, + { + "name": "minecraft:enderman_spawn_egg", + "id": 445 + }, + { + "name": "minecraft:endermite_spawn_egg", + "id": 463 + }, + { + "name": "minecraft:evoker_spawn_egg", + "id": 478 + }, + { + "name": "minecraft:experience_bottle", + "id": 517 + }, + { + "name": "minecraft:explorer_pottery_sherd", + "id": 672 + }, + { + "name": "minecraft:exposed_chiseled_copper", + "id": -761 + }, + { + "name": "minecraft:exposed_copper", + "id": -341 + }, + { + "name": "minecraft:exposed_copper_bulb", + "id": -777 + }, + { + "name": "minecraft:exposed_copper_door", + "id": -785 + }, + { + "name": "minecraft:exposed_copper_grate", + "id": -769 + }, + { + "name": "minecraft:exposed_copper_trapdoor", + "id": -793 + }, + { + "name": "minecraft:exposed_cut_copper", + "id": -348 + }, + { + "name": "minecraft:exposed_cut_copper_slab", + "id": -362 + }, + { + "name": "minecraft:exposed_cut_copper_stairs", + "id": -355 + }, + { + "name": "minecraft:exposed_double_cut_copper_slab", + "id": -369 + }, + { + "name": "minecraft:eye_armor_trim_smithing_template", + "id": 692 + }, + { + "name": "minecraft:farmland", + "id": 60 + }, + { + "name": "minecraft:feather", + "id": 330 + }, + { + "name": "minecraft:fence", + "id": 712 + }, + { + "name": "minecraft:fence_gate", + "id": 107 + }, + { + "name": "minecraft:fermented_spider_eye", + "id": 431 + }, + { + "name": "minecraft:field_masoned_banner_pattern", + "id": 594 + }, + { + "name": "minecraft:filled_map", + "id": 423 + }, + { + "name": "minecraft:fire", + "id": 51 + }, + { + "name": "minecraft:fire_charge", + "id": 518 + }, + { + "name": "minecraft:fire_coral", + "id": -583 + }, + { + "name": "minecraft:firework_rocket", + "id": 528 + }, + { + "name": "minecraft:firework_star", + "id": 529 + }, + { + "name": "minecraft:fishing_rod", + "id": 395 + }, + { + "name": "minecraft:fletching_table", + "id": -201 + }, + { + "name": "minecraft:flint", + "id": 359 + }, + { + "name": "minecraft:flint_and_steel", + "id": 302 + }, + { + "name": "minecraft:flower_banner_pattern", + "id": 590 + }, + { + "name": "minecraft:flower_pot", + "id": 523 + }, + { + "name": "minecraft:flowering_azalea", + "id": -338 + }, + { + "name": "minecraft:flowing_lava", + "id": 10 + }, + { + "name": "minecraft:flowing_water", + "id": 8 + }, + { + "name": "minecraft:fox_spawn_egg", + "id": 493 + }, + { + "name": "minecraft:frame", + "id": 522 + }, + { + "name": "minecraft:friend_pottery_sherd", + "id": 673 + }, + { + "name": "minecraft:frog_spawn", + "id": -468 + }, + { + "name": "minecraft:frog_spawn_egg", + "id": 637 + }, + { + "name": "minecraft:frosted_ice", + "id": 207 + }, + { + "name": "minecraft:furnace", + "id": 61 + }, + { + "name": "minecraft:ghast_spawn_egg", + "id": 457 + }, + { + "name": "minecraft:ghast_tear", + "id": 427 + }, + { + "name": "minecraft:gilded_blackstone", + "id": -281 + }, + { + "name": "minecraft:glass", + "id": 20 + }, + { + "name": "minecraft:glass_bottle", + "id": 430 + }, + { + "name": "minecraft:glass_pane", + "id": 102 + }, + { + "name": "minecraft:glistering_melon_slice", + "id": 437 + }, + { + "name": "minecraft:globe_banner_pattern", + "id": 597 + }, + { + "name": "minecraft:glow_berries", + "id": 728 + }, + { + "name": "minecraft:glow_frame", + "id": 632 + }, + { + "name": "minecraft:glow_ink_sac", + "id": 512 + }, + { + "name": "minecraft:glow_lichen", + "id": -411 + }, + { + "name": "minecraft:glow_squid_spawn_egg", + "id": 507 + }, + { + "name": "minecraft:glow_stick", + "id": 610 + }, + { + "name": "minecraft:glowingobsidian", + "id": 246 + }, + { + "name": "minecraft:glowstone", + "id": 89 + }, + { + "name": "minecraft:glowstone_dust", + "id": 397 + }, + { + "name": "minecraft:goat_horn", + "id": 636 + }, + { + "name": "minecraft:goat_spawn_egg", + "id": 506 + }, + { + "name": "minecraft:gold_block", + "id": 41 + }, + { + "name": "minecraft:gold_ingot", + "id": 309 + }, + { + "name": "minecraft:gold_nugget", + "id": 428 + }, + { + "name": "minecraft:gold_ore", + "id": 14 + }, + { + "name": "minecraft:golden_apple", + "id": 259 + }, + { + "name": "minecraft:golden_axe", + "id": 328 + }, + { + "name": "minecraft:golden_boots", + "id": 357 + }, + { + "name": "minecraft:golden_carrot", + "id": 284 + }, + { + "name": "minecraft:golden_chestplate", + "id": 355 + }, + { + "name": "minecraft:golden_helmet", + "id": 354 + }, + { + "name": "minecraft:golden_hoe", + "id": 336 + }, + { + "name": "minecraft:golden_horse_armor", + "id": 541 + }, + { + "name": "minecraft:golden_leggings", + "id": 356 + }, + { + "name": "minecraft:golden_pickaxe", + "id": 327 + }, + { + "name": "minecraft:golden_rail", + "id": 27 + }, + { + "name": "minecraft:golden_shovel", + "id": 326 + }, + { + "name": "minecraft:golden_sword", + "id": 325 + }, + { + "name": "minecraft:granite", + "id": -590 + }, + { + "name": "minecraft:granite_stairs", + "id": -169 + }, + { + "name": "minecraft:grass", + "id": 2 + }, + { + "name": "minecraft:grass_path", + "id": 198 + }, + { + "name": "minecraft:gravel", + "id": 13 + }, + { + "name": "minecraft:gray_candle", + "id": -420 + }, + { + "name": "minecraft:gray_candle_cake", + "id": -437 + }, + { + "name": "minecraft:gray_carpet", + "id": -603 + }, + { + "name": "minecraft:gray_concrete", + "id": -634 + }, + { + "name": "minecraft:gray_concrete_powder", + "id": -715 + }, + { + "name": "minecraft:gray_dye", + "id": 406 + }, + { + "name": "minecraft:gray_glazed_terracotta", + "id": 227 + }, + { + "name": "minecraft:gray_shulker_box", + "id": -619 + }, + { + "name": "minecraft:gray_stained_glass", + "id": -679 + }, + { + "name": "minecraft:gray_stained_glass_pane", + "id": -649 + }, + { + "name": "minecraft:gray_terracotta", + "id": -730 + }, + { + "name": "minecraft:gray_wool", + "id": -553 + }, + { + "name": "minecraft:green_candle", + "id": -426 + }, + { + "name": "minecraft:green_candle_cake", + "id": -443 + }, + { + "name": "minecraft:green_carpet", + "id": -609 + }, + { + "name": "minecraft:green_concrete", + "id": -640 + }, + { + "name": "minecraft:green_concrete_powder", + "id": -721 + }, + { + "name": "minecraft:green_dye", + "id": 400 + }, + { + "name": "minecraft:green_glazed_terracotta", + "id": 233 + }, + { + "name": "minecraft:green_shulker_box", + "id": -625 + }, + { + "name": "minecraft:green_stained_glass", + "id": -685 + }, + { + "name": "minecraft:green_stained_glass_pane", + "id": -655 + }, + { + "name": "minecraft:green_terracotta", + "id": -736 + }, + { + "name": "minecraft:green_wool", + "id": -560 + }, + { + "name": "minecraft:grindstone", + "id": -195 + }, + { + "name": "minecraft:guardian_spawn_egg", + "id": 464 + }, + { + "name": "minecraft:gunpowder", + "id": 331 + }, + { + "name": "minecraft:hanging_roots", + "id": -319 + }, + { + "name": "minecraft:hard_black_stained_glass", + "id": -702 + }, + { + "name": "minecraft:hard_black_stained_glass_pane", + "id": -672 + }, + { + "name": "minecraft:hard_blue_stained_glass", + "id": -698 + }, + { + "name": "minecraft:hard_blue_stained_glass_pane", + "id": -668 + }, + { + "name": "minecraft:hard_brown_stained_glass", + "id": -699 + }, + { + "name": "minecraft:hard_brown_stained_glass_pane", + "id": -669 + }, + { + "name": "minecraft:hard_cyan_stained_glass", + "id": -696 + }, + { + "name": "minecraft:hard_cyan_stained_glass_pane", + "id": -666 + }, + { + "name": "minecraft:hard_glass", + "id": 253 + }, + { + "name": "minecraft:hard_glass_pane", + "id": 190 + }, + { + "name": "minecraft:hard_gray_stained_glass", + "id": -694 + }, + { + "name": "minecraft:hard_gray_stained_glass_pane", + "id": -664 + }, + { + "name": "minecraft:hard_green_stained_glass", + "id": -700 + }, + { + "name": "minecraft:hard_green_stained_glass_pane", + "id": -670 + }, + { + "name": "minecraft:hard_light_blue_stained_glass", + "id": -690 + }, + { + "name": "minecraft:hard_light_blue_stained_glass_pane", + "id": -660 + }, + { + "name": "minecraft:hard_light_gray_stained_glass", + "id": -695 + }, + { + "name": "minecraft:hard_light_gray_stained_glass_pane", + "id": -665 + }, + { + "name": "minecraft:hard_lime_stained_glass", + "id": -692 + }, + { + "name": "minecraft:hard_lime_stained_glass_pane", + "id": -662 + }, + { + "name": "minecraft:hard_magenta_stained_glass", + "id": -689 + }, + { + "name": "minecraft:hard_magenta_stained_glass_pane", + "id": -659 + }, + { + "name": "minecraft:hard_orange_stained_glass", + "id": -688 + }, + { + "name": "minecraft:hard_orange_stained_glass_pane", + "id": -658 + }, + { + "name": "minecraft:hard_pink_stained_glass", + "id": -693 + }, + { + "name": "minecraft:hard_pink_stained_glass_pane", + "id": -663 + }, + { + "name": "minecraft:hard_purple_stained_glass", + "id": -697 + }, + { + "name": "minecraft:hard_purple_stained_glass_pane", + "id": -667 + }, + { + "name": "minecraft:hard_red_stained_glass", + "id": -701 + }, + { + "name": "minecraft:hard_red_stained_glass_pane", + "id": -671 + }, + { + "name": "minecraft:hard_stained_glass", + "id": 721 + }, + { + "name": "minecraft:hard_stained_glass_pane", + "id": 722 + }, + { + "name": "minecraft:hard_white_stained_glass", + "id": 254 + }, + { + "name": "minecraft:hard_white_stained_glass_pane", + "id": 191 + }, + { + "name": "minecraft:hard_yellow_stained_glass", + "id": -691 + }, + { + "name": "minecraft:hard_yellow_stained_glass_pane", + "id": -661 + }, + { + "name": "minecraft:hardened_clay", + "id": 172 + }, + { + "name": "minecraft:hay_block", + "id": 170 + }, + { + "name": "minecraft:heart_of_the_sea", + "id": 580 + }, + { + "name": "minecraft:heart_pottery_sherd", + "id": 674 + }, + { + "name": "minecraft:heartbreak_pottery_sherd", + "id": 675 + }, + { + "name": "minecraft:heavy_weighted_pressure_plate", + "id": 148 + }, + { + "name": "minecraft:hoglin_spawn_egg", + "id": 499 + }, + { + "name": "minecraft:honey_block", + "id": -220 + }, + { + "name": "minecraft:honey_bottle", + "id": 601 + }, + { + "name": "minecraft:honeycomb", + "id": 600 + }, + { + "name": "minecraft:honeycomb_block", + "id": -221 + }, + { + "name": "minecraft:hopper", + "id": 536 + }, + { + "name": "minecraft:hopper_minecart", + "id": 535 + }, + { + "name": "minecraft:horn_coral", + "id": -584 + }, + { + "name": "minecraft:horse_spawn_egg", + "id": 461 + }, + { + "name": "minecraft:host_armor_trim_smithing_template", + "id": 702 + }, + { + "name": "minecraft:howl_pottery_sherd", + "id": 676 + }, + { + "name": "minecraft:husk_spawn_egg", + "id": 466 + }, + { + "name": "minecraft:ice", + "id": 79 + }, + { + "name": "minecraft:ice_bomb", + "id": 604 + }, + { + "name": "minecraft:infested_deepslate", + "id": -454 + }, + { + "name": "minecraft:info_update", + "id": 248 + }, + { + "name": "minecraft:info_update2", + "id": 249 + }, + { + "name": "minecraft:ink_sac", + "id": 416 + }, + { + "name": "minecraft:invisible_bedrock", + "id": 95 + }, + { + "name": "minecraft:iron_axe", + "id": 301 + }, + { + "name": "minecraft:iron_bars", + "id": 101 + }, + { + "name": "minecraft:iron_block", + "id": 42 + }, + { + "name": "minecraft:iron_boots", + "id": 349 + }, + { + "name": "minecraft:iron_chestplate", + "id": 347 + }, + { + "name": "minecraft:iron_door", + "id": 375 + }, + { + "name": "minecraft:iron_golem_spawn_egg", + "id": 508 + }, + { + "name": "minecraft:iron_helmet", + "id": 346 + }, + { + "name": "minecraft:iron_hoe", + "id": 334 + }, + { + "name": "minecraft:iron_horse_armor", + "id": 540 + }, + { + "name": "minecraft:iron_ingot", + "id": 308 + }, + { + "name": "minecraft:iron_leggings", + "id": 348 + }, + { + "name": "minecraft:iron_nugget", + "id": 578 + }, + { + "name": "minecraft:iron_ore", + "id": 15 + }, + { + "name": "minecraft:iron_pickaxe", + "id": 300 + }, + { + "name": "minecraft:iron_shovel", + "id": 299 + }, + { + "name": "minecraft:iron_sword", + "id": 310 + }, + { + "name": "minecraft:iron_trapdoor", + "id": 167 + }, + { + "name": "minecraft:item.acacia_door", + "id": 196 + }, + { + "name": "minecraft:item.bed", + "id": 26 + }, + { + "name": "minecraft:item.beetroot", + "id": 244 + }, + { + "name": "minecraft:item.birch_door", + "id": 194 + }, + { + "name": "minecraft:item.brewing_stand", + "id": 117 + }, + { + "name": "minecraft:item.cake", + "id": 92 + }, + { + "name": "minecraft:item.camera", + "id": 242 + }, + { + "name": "minecraft:item.campfire", + "id": -209 + }, + { + "name": "minecraft:item.cauldron", + "id": 118 + }, + { + "name": "minecraft:item.chain", + "id": -286 + }, + { + "name": "minecraft:item.crimson_door", + "id": -244 + }, + { + "name": "minecraft:item.dark_oak_door", + "id": 197 + }, + { + "name": "minecraft:item.flower_pot", + "id": 140 + }, + { + "name": "minecraft:item.frame", + "id": 199 + }, + { + "name": "minecraft:item.glow_frame", + "id": -339 + }, + { + "name": "minecraft:item.hopper", + "id": 154 + }, + { + "name": "minecraft:item.iron_door", + "id": 71 + }, + { + "name": "minecraft:item.jungle_door", + "id": 195 + }, + { + "name": "minecraft:item.kelp", + "id": -138 + }, + { + "name": "minecraft:item.mangrove_door", + "id": -493 + }, + { + "name": "minecraft:item.nether_sprouts", + "id": -238 + }, + { + "name": "minecraft:item.nether_wart", + "id": 115 + }, + { + "name": "minecraft:item.reeds", + "id": 83 + }, + { + "name": "minecraft:item.skull", + "id": 144 + }, + { + "name": "minecraft:item.soul_campfire", + "id": -290 + }, + { + "name": "minecraft:item.spruce_door", + "id": 193 + }, + { + "name": "minecraft:item.warped_door", + "id": -245 + }, + { + "name": "minecraft:item.wheat", + "id": 59 + }, + { + "name": "minecraft:item.wooden_door", + "id": 64 + }, + { + "name": "minecraft:jigsaw", + "id": -211 + }, + { + "name": "minecraft:jukebox", + "id": 84 + }, + { + "name": "minecraft:jungle_boat", + "id": 380 + }, + { + "name": "minecraft:jungle_button", + "id": -143 + }, + { + "name": "minecraft:jungle_chest_boat", + "id": 649 + }, + { + "name": "minecraft:jungle_door", + "id": 564 + }, + { + "name": "minecraft:jungle_fence", + "id": -578 + }, + { + "name": "minecraft:jungle_fence_gate", + "id": 185 + }, + { + "name": "minecraft:jungle_hanging_sign", + "id": -503 + }, + { + "name": "minecraft:jungle_log", + "id": -571 + }, + { + "name": "minecraft:jungle_planks", + "id": -741 + }, + { + "name": "minecraft:jungle_pressure_plate", + "id": -153 + }, + { + "name": "minecraft:jungle_sign", + "id": 587 + }, + { + "name": "minecraft:jungle_stairs", + "id": 136 + }, + { + "name": "minecraft:jungle_standing_sign", + "id": -188 + }, + { + "name": "minecraft:jungle_trapdoor", + "id": -148 + }, + { + "name": "minecraft:jungle_wall_sign", + "id": -189 + }, + { + "name": "minecraft:kelp", + "id": 385 + }, + { + "name": "minecraft:ladder", + "id": 65 + }, + { + "name": "minecraft:lantern", + "id": -208 + }, + { + "name": "minecraft:lapis_block", + "id": 22 + }, + { + "name": "minecraft:lapis_lazuli", + "id": 417 + }, + { + "name": "minecraft:lapis_ore", + "id": 21 + }, + { + "name": "minecraft:large_amethyst_bud", + "id": -330 + }, + { + "name": "minecraft:lava", + "id": 11 + }, + { + "name": "minecraft:lava_bucket", + "id": 366 + }, + { + "name": "minecraft:lead", + "id": 556 + }, + { + "name": "minecraft:leather", + "id": 384 + }, + { + "name": "minecraft:leather_boots", + "id": 341 + }, + { + "name": "minecraft:leather_chestplate", + "id": 339 + }, + { + "name": "minecraft:leather_helmet", + "id": 338 + }, + { + "name": "minecraft:leather_horse_armor", + "id": 539 + }, + { + "name": "minecraft:leather_leggings", + "id": 340 + }, + { + "name": "minecraft:leaves", + "id": 18 + }, + { + "name": "minecraft:leaves2", + "id": 161 + }, + { + "name": "minecraft:lectern", + "id": -194 + }, + { + "name": "minecraft:lever", + "id": 69 + }, + { + "name": "minecraft:light_block", + "id": -215 + }, + { + "name": "minecraft:light_blue_candle", + "id": -416 + }, + { + "name": "minecraft:light_blue_candle_cake", + "id": -433 + }, + { + "name": "minecraft:light_blue_carpet", + "id": -599 + }, + { + "name": "minecraft:light_blue_concrete", + "id": -630 + }, + { + "name": "minecraft:light_blue_concrete_powder", + "id": -711 + }, + { + "name": "minecraft:light_blue_dye", + "id": 410 + }, + { + "name": "minecraft:light_blue_glazed_terracotta", + "id": 223 + }, + { + "name": "minecraft:light_blue_shulker_box", + "id": -615 + }, + { + "name": "minecraft:light_blue_stained_glass", + "id": -675 + }, + { + "name": "minecraft:light_blue_stained_glass_pane", + "id": -645 + }, + { + "name": "minecraft:light_blue_terracotta", + "id": -726 + }, + { + "name": "minecraft:light_blue_wool", + "id": -562 + }, + { + "name": "minecraft:light_gray_candle", + "id": -421 + }, + { + "name": "minecraft:light_gray_candle_cake", + "id": -438 + }, + { + "name": "minecraft:light_gray_carpet", + "id": -604 + }, + { + "name": "minecraft:light_gray_concrete", + "id": -635 + }, + { + "name": "minecraft:light_gray_concrete_powder", + "id": -716 + }, + { + "name": "minecraft:light_gray_dye", + "id": 405 + }, + { + "name": "minecraft:light_gray_shulker_box", + "id": -620 + }, + { + "name": "minecraft:light_gray_stained_glass", + "id": -680 + }, + { + "name": "minecraft:light_gray_stained_glass_pane", + "id": -650 + }, + { + "name": "minecraft:light_gray_terracotta", + "id": -731 + }, + { + "name": "minecraft:light_gray_wool", + "id": -552 + }, + { + "name": "minecraft:light_weighted_pressure_plate", + "id": 147 + }, + { + "name": "minecraft:lightning_rod", + "id": -312 + }, + { + "name": "minecraft:lime_candle", + "id": -418 + }, + { + "name": "minecraft:lime_candle_cake", + "id": -435 + }, + { + "name": "minecraft:lime_carpet", + "id": -601 + }, + { + "name": "minecraft:lime_concrete", + "id": -632 + }, + { + "name": "minecraft:lime_concrete_powder", + "id": -713 + }, + { + "name": "minecraft:lime_dye", + "id": 408 + }, + { + "name": "minecraft:lime_glazed_terracotta", + "id": 225 + }, + { + "name": "minecraft:lime_shulker_box", + "id": -617 + }, + { + "name": "minecraft:lime_stained_glass", + "id": -677 + }, + { + "name": "minecraft:lime_stained_glass_pane", + "id": -647 + }, + { + "name": "minecraft:lime_terracotta", + "id": -728 + }, + { + "name": "minecraft:lime_wool", + "id": -559 + }, + { + "name": "minecraft:lingering_potion", + "id": 571 + }, + { + "name": "minecraft:lit_blast_furnace", + "id": -214 + }, + { + "name": "minecraft:lit_deepslate_redstone_ore", + "id": -404 + }, + { + "name": "minecraft:lit_furnace", + "id": 62 + }, + { + "name": "minecraft:lit_pumpkin", + "id": 91 + }, + { + "name": "minecraft:lit_redstone_lamp", + "id": 124 + }, + { + "name": "minecraft:lit_redstone_ore", + "id": 74 + }, + { + "name": "minecraft:lit_smoker", + "id": -199 + }, + { + "name": "minecraft:llama_spawn_egg", + "id": 476 + }, + { + "name": "minecraft:lodestone", + "id": -222 + }, + { + "name": "minecraft:lodestone_compass", + "id": 611 + }, + { + "name": "minecraft:log", + "id": 711 + }, + { + "name": "minecraft:log2", + "id": 715 + }, + { + "name": "minecraft:loom", + "id": -204 + }, + { + "name": "minecraft:magenta_candle", + "id": -415 + }, + { + "name": "minecraft:magenta_candle_cake", + "id": -432 + }, + { + "name": "minecraft:magenta_carpet", + "id": -598 + }, + { + "name": "minecraft:magenta_concrete", + "id": -629 + }, + { + "name": "minecraft:magenta_concrete_powder", + "id": -710 + }, + { + "name": "minecraft:magenta_dye", + "id": 411 + }, + { + "name": "minecraft:magenta_glazed_terracotta", + "id": 222 + }, + { + "name": "minecraft:magenta_shulker_box", + "id": -614 + }, + { + "name": "minecraft:magenta_stained_glass", + "id": -674 + }, + { + "name": "minecraft:magenta_stained_glass_pane", + "id": -644 + }, + { + "name": "minecraft:magenta_terracotta", + "id": -725 + }, + { + "name": "minecraft:magenta_wool", + "id": -565 + }, + { + "name": "minecraft:magma", + "id": 213 + }, + { + "name": "minecraft:magma_cream", + "id": 433 + }, + { + "name": "minecraft:magma_cube_spawn_egg", + "id": 458 + }, + { + "name": "minecraft:mangrove_boat", + "id": 644 + }, + { + "name": "minecraft:mangrove_button", + "id": -487 + }, + { + "name": "minecraft:mangrove_chest_boat", + "id": 653 + }, + { + "name": "minecraft:mangrove_door", + "id": 642 + }, + { + "name": "minecraft:mangrove_double_slab", + "id": -499 + }, + { + "name": "minecraft:mangrove_fence", + "id": -491 + }, + { + "name": "minecraft:mangrove_fence_gate", + "id": -492 + }, + { + "name": "minecraft:mangrove_hanging_sign", + "id": -508 + }, + { + "name": "minecraft:mangrove_leaves", + "id": -472 + }, + { + "name": "minecraft:mangrove_log", + "id": -484 + }, + { + "name": "minecraft:mangrove_planks", + "id": -486 + }, + { + "name": "minecraft:mangrove_pressure_plate", + "id": -490 + }, + { + "name": "minecraft:mangrove_propagule", + "id": -474 + }, + { + "name": "minecraft:mangrove_roots", + "id": -482 + }, + { + "name": "minecraft:mangrove_sign", + "id": 643 + }, + { + "name": "minecraft:mangrove_slab", + "id": -489 + }, + { + "name": "minecraft:mangrove_stairs", + "id": -488 + }, + { + "name": "minecraft:mangrove_standing_sign", + "id": -494 + }, + { + "name": "minecraft:mangrove_trapdoor", + "id": -496 + }, + { + "name": "minecraft:mangrove_wall_sign", + "id": -495 + }, + { + "name": "minecraft:mangrove_wood", + "id": -497 + }, + { + "name": "minecraft:medicine", + "id": 608 + }, + { + "name": "minecraft:medium_amethyst_bud", + "id": -331 + }, + { + "name": "minecraft:melon_block", + "id": 103 + }, + { + "name": "minecraft:melon_seeds", + "id": 294 + }, + { + "name": "minecraft:melon_slice", + "id": 273 + }, + { + "name": "minecraft:melon_stem", + "id": 105 + }, + { + "name": "minecraft:milk_bucket", + "id": 364 + }, + { + "name": "minecraft:minecart", + "id": 373 + }, + { + "name": "minecraft:miner_pottery_sherd", + "id": 677 + }, + { + "name": "minecraft:mob_spawner", + "id": 52 + }, + { + "name": "minecraft:mojang_banner_pattern", + "id": 593 + }, + { + "name": "minecraft:monster_egg", + "id": 97 + }, + { + "name": "minecraft:mooshroom_spawn_egg", + "id": 443 + }, + { + "name": "minecraft:moss_block", + "id": -320 + }, + { + "name": "minecraft:moss_carpet", + "id": -335 + }, + { + "name": "minecraft:mossy_cobblestone", + "id": 48 + }, + { + "name": "minecraft:mossy_cobblestone_stairs", + "id": -179 + }, + { + "name": "minecraft:mossy_stone_brick_stairs", + "id": -175 + }, + { + "name": "minecraft:mourner_pottery_sherd", + "id": 678 + }, + { + "name": "minecraft:moving_block", + "id": 250 + }, + { + "name": "minecraft:mud", + "id": -473 + }, + { + "name": "minecraft:mud_brick_double_slab", + "id": -479 + }, + { + "name": "minecraft:mud_brick_slab", + "id": -478 + }, + { + "name": "minecraft:mud_brick_stairs", + "id": -480 + }, + { + "name": "minecraft:mud_brick_wall", + "id": -481 + }, + { + "name": "minecraft:mud_bricks", + "id": -475 + }, + { + "name": "minecraft:muddy_mangrove_roots", + "id": -483 + }, + { + "name": "minecraft:mule_spawn_egg", + "id": 469 + }, + { + "name": "minecraft:mushroom_stew", + "id": 261 + }, + { + "name": "minecraft:music_disc_11", + "id": 553 + }, + { + "name": "minecraft:music_disc_13", + "id": 543 + }, + { + "name": "minecraft:music_disc_5", + "id": 645 + }, + { + "name": "minecraft:music_disc_blocks", + "id": 545 + }, + { + "name": "minecraft:music_disc_cat", + "id": 544 + }, + { + "name": "minecraft:music_disc_chirp", + "id": 546 + }, + { + "name": "minecraft:music_disc_far", + "id": 547 + }, + { + "name": "minecraft:music_disc_mall", + "id": 548 + }, + { + "name": "minecraft:music_disc_mellohi", + "id": 549 + }, + { + "name": "minecraft:music_disc_otherside", + "id": 635 + }, + { + "name": "minecraft:music_disc_pigstep", + "id": 629 + }, + { + "name": "minecraft:music_disc_relic", + "id": 703 + }, + { + "name": "minecraft:music_disc_stal", + "id": 550 + }, + { + "name": "minecraft:music_disc_strad", + "id": 551 + }, + { + "name": "minecraft:music_disc_wait", + "id": 554 + }, + { + "name": "minecraft:music_disc_ward", + "id": 552 + }, + { + "name": "minecraft:mutton", + "id": 559 + }, + { + "name": "minecraft:mycelium", + "id": 110 + }, + { + "name": "minecraft:name_tag", + "id": 557 + }, + { + "name": "minecraft:nautilus_shell", + "id": 579 + }, + { + "name": "minecraft:nether_brick", + "id": 112 + }, + { + "name": "minecraft:nether_brick_fence", + "id": 113 + }, + { + "name": "minecraft:nether_brick_stairs", + "id": 114 + }, + { + "name": "minecraft:nether_gold_ore", + "id": -288 + }, + { + "name": "minecraft:nether_sprouts", + "id": 630 + }, + { + "name": "minecraft:nether_star", + "id": 527 + }, + { + "name": "minecraft:nether_wart", + "id": 295 + }, + { + "name": "minecraft:nether_wart_block", + "id": 214 + }, + { + "name": "minecraft:netherbrick", + "id": 532 + }, + { + "name": "minecraft:netherite_axe", + "id": 615 + }, + { + "name": "minecraft:netherite_block", + "id": -270 + }, + { + "name": "minecraft:netherite_boots", + "id": 621 + }, + { + "name": "minecraft:netherite_chestplate", + "id": 619 + }, + { + "name": "minecraft:netherite_helmet", + "id": 618 + }, + { + "name": "minecraft:netherite_hoe", + "id": 616 + }, + { + "name": "minecraft:netherite_ingot", + "id": 617 + }, + { + "name": "minecraft:netherite_leggings", + "id": 620 + }, + { + "name": "minecraft:netherite_pickaxe", + "id": 614 + }, + { + "name": "minecraft:netherite_scrap", + "id": 622 + }, + { + "name": "minecraft:netherite_shovel", + "id": 613 + }, + { + "name": "minecraft:netherite_sword", + "id": 612 + }, + { + "name": "minecraft:netherite_upgrade_smithing_template", + "id": 686 + }, + { + "name": "minecraft:netherrack", + "id": 87 + }, + { + "name": "minecraft:netherreactor", + "id": 247 + }, + { + "name": "minecraft:normal_stone_stairs", + "id": -180 + }, + { + "name": "minecraft:noteblock", + "id": 25 + }, + { + "name": "minecraft:npc_spawn_egg", + "id": 473 + }, + { + "name": "minecraft:oak_boat", + "id": 378 + }, + { + "name": "minecraft:oak_chest_boat", + "id": 647 + }, + { + "name": "minecraft:oak_fence", + "id": 85 + }, + { + "name": "minecraft:oak_hanging_sign", + "id": -500 + }, + { + "name": "minecraft:oak_log", + "id": 17 + }, + { + "name": "minecraft:oak_planks", + "id": 5 + }, + { + "name": "minecraft:oak_sign", + "id": 361 + }, + { + "name": "minecraft:oak_stairs", + "id": 53 + }, + { + "name": "minecraft:observer", + "id": 251 + }, + { + "name": "minecraft:obsidian", + "id": 49 + }, + { + "name": "minecraft:ocelot_spawn_egg", + "id": 454 + }, + { + "name": "minecraft:ochre_froglight", + "id": -471 + }, + { + "name": "minecraft:orange_candle", + "id": -414 + }, + { + "name": "minecraft:orange_candle_cake", + "id": -431 + }, + { + "name": "minecraft:orange_carpet", + "id": -597 + }, + { + "name": "minecraft:orange_concrete", + "id": -628 + }, + { + "name": "minecraft:orange_concrete_powder", + "id": -709 + }, + { + "name": "minecraft:orange_dye", + "id": 412 + }, + { + "name": "minecraft:orange_glazed_terracotta", + "id": 221 + }, + { + "name": "minecraft:orange_shulker_box", + "id": -613 + }, + { + "name": "minecraft:orange_stained_glass", + "id": -673 + }, + { + "name": "minecraft:orange_stained_glass_pane", + "id": -643 + }, + { + "name": "minecraft:orange_terracotta", + "id": -724 + }, + { + "name": "minecraft:orange_wool", + "id": -557 + }, + { + "name": "minecraft:oxidized_chiseled_copper", + "id": -763 + }, + { + "name": "minecraft:oxidized_copper", + "id": -343 + }, + { + "name": "minecraft:oxidized_copper_bulb", + "id": -779 + }, + { + "name": "minecraft:oxidized_copper_door", + "id": -787 + }, + { + "name": "minecraft:oxidized_copper_grate", + "id": -771 + }, + { + "name": "minecraft:oxidized_copper_trapdoor", + "id": -795 + }, + { + "name": "minecraft:oxidized_cut_copper", + "id": -350 + }, + { + "name": "minecraft:oxidized_cut_copper_slab", + "id": -364 + }, + { + "name": "minecraft:oxidized_cut_copper_stairs", + "id": -357 + }, + { + "name": "minecraft:oxidized_double_cut_copper_slab", + "id": -371 + }, + { + "name": "minecraft:packed_ice", + "id": 174 + }, + { + "name": "minecraft:packed_mud", + "id": -477 + }, + { + "name": "minecraft:painting", + "id": 360 + }, + { + "name": "minecraft:panda_spawn_egg", + "id": 492 + }, + { + "name": "minecraft:paper", + "id": 389 + }, + { + "name": "minecraft:parrot_spawn_egg", + "id": 481 + }, + { + "name": "minecraft:pearlescent_froglight", + "id": -469 + }, + { + "name": "minecraft:phantom_membrane", + "id": 583 + }, + { + "name": "minecraft:phantom_spawn_egg", + "id": 489 + }, + { + "name": "minecraft:pig_spawn_egg", + "id": 440 + }, + { + "name": "minecraft:piglin_banner_pattern", + "id": 596 + }, + { + "name": "minecraft:piglin_brute_spawn_egg", + "id": 502 + }, + { + "name": "minecraft:piglin_spawn_egg", + "id": 500 + }, + { + "name": "minecraft:pillager_spawn_egg", + "id": 494 + }, + { + "name": "minecraft:pink_candle", + "id": -419 + }, + { + "name": "minecraft:pink_candle_cake", + "id": -436 + }, + { + "name": "minecraft:pink_carpet", + "id": -602 + }, + { + "name": "minecraft:pink_concrete", + "id": -633 + }, + { + "name": "minecraft:pink_concrete_powder", + "id": -714 + }, + { + "name": "minecraft:pink_dye", + "id": 407 + }, + { + "name": "minecraft:pink_glazed_terracotta", + "id": 226 + }, + { + "name": "minecraft:pink_petals", + "id": -549 + }, + { + "name": "minecraft:pink_shulker_box", + "id": -618 + }, + { + "name": "minecraft:pink_stained_glass", + "id": -678 + }, + { + "name": "minecraft:pink_stained_glass_pane", + "id": -648 + }, + { + "name": "minecraft:pink_terracotta", + "id": -729 + }, + { + "name": "minecraft:pink_wool", + "id": -566 + }, + { + "name": "minecraft:piston", + "id": 33 + }, + { + "name": "minecraft:piston_arm_collision", + "id": 34 + }, + { + "name": "minecraft:pitcher_crop", + "id": -574 + }, + { + "name": "minecraft:pitcher_plant", + "id": -612 + }, + { + "name": "minecraft:pitcher_pod", + "id": 298 + }, + { + "name": "minecraft:planks", + "id": 713 + }, + { + "name": "minecraft:plenty_pottery_sherd", + "id": 679 + }, + { + "name": "minecraft:podzol", + "id": 243 + }, + { + "name": "minecraft:pointed_dripstone", + "id": -308 + }, + { + "name": "minecraft:poisonous_potato", + "id": 283 + }, + { + "name": "minecraft:polar_bear_spawn_egg", + "id": 475 + }, + { + "name": "minecraft:polished_andesite", + "id": -595 + }, + { + "name": "minecraft:polished_andesite_stairs", + "id": -174 + }, + { + "name": "minecraft:polished_basalt", + "id": -235 + }, + { + "name": "minecraft:polished_blackstone", + "id": -291 + }, + { + "name": "minecraft:polished_blackstone_brick_double_slab", + "id": -285 + }, + { + "name": "minecraft:polished_blackstone_brick_slab", + "id": -284 + }, + { + "name": "minecraft:polished_blackstone_brick_stairs", + "id": -275 + }, + { + "name": "minecraft:polished_blackstone_brick_wall", + "id": -278 + }, + { + "name": "minecraft:polished_blackstone_bricks", + "id": -274 + }, + { + "name": "minecraft:polished_blackstone_button", + "id": -296 + }, + { + "name": "minecraft:polished_blackstone_double_slab", + "id": -294 + }, + { + "name": "minecraft:polished_blackstone_pressure_plate", + "id": -295 + }, + { + "name": "minecraft:polished_blackstone_slab", + "id": -293 + }, + { + "name": "minecraft:polished_blackstone_stairs", + "id": -292 + }, + { + "name": "minecraft:polished_blackstone_wall", + "id": -297 + }, + { + "name": "minecraft:polished_deepslate", + "id": -383 + }, + { + "name": "minecraft:polished_deepslate_double_slab", + "id": -397 + }, + { + "name": "minecraft:polished_deepslate_slab", + "id": -384 + }, + { + "name": "minecraft:polished_deepslate_stairs", + "id": -385 + }, + { + "name": "minecraft:polished_deepslate_wall", + "id": -386 + }, + { + "name": "minecraft:polished_diorite", + "id": -593 + }, + { + "name": "minecraft:polished_diorite_stairs", + "id": -173 + }, + { + "name": "minecraft:polished_granite", + "id": -591 + }, + { + "name": "minecraft:polished_granite_stairs", + "id": -172 + }, + { + "name": "minecraft:polished_tuff", + "id": -748 + }, + { + "name": "minecraft:polished_tuff_double_slab", + "id": -750 + }, + { + "name": "minecraft:polished_tuff_slab", + "id": -749 + }, + { + "name": "minecraft:polished_tuff_stairs", + "id": -751 + }, + { + "name": "minecraft:polished_tuff_wall", + "id": -752 + }, + { + "name": "minecraft:popped_chorus_fruit", + "id": 568 + }, + { + "name": "minecraft:porkchop", + "id": 263 + }, + { + "name": "minecraft:portal", + "id": 90 + }, + { + "name": "minecraft:potato", + "id": 281 + }, + { + "name": "minecraft:potatoes", + "id": 142 + }, + { + "name": "minecraft:potion", + "id": 429 + }, + { + "name": "minecraft:powder_snow", + "id": -306 + }, + { + "name": "minecraft:powder_snow_bucket", + "id": 371 + }, + { + "name": "minecraft:powered_comparator", + "id": 150 + }, + { + "name": "minecraft:powered_repeater", + "id": 94 + }, + { + "name": "minecraft:prismarine", + "id": 168 + }, + { + "name": "minecraft:prismarine_bricks_stairs", + "id": -4 + }, + { + "name": "minecraft:prismarine_crystals", + "id": 558 + }, + { + "name": "minecraft:prismarine_shard", + "id": 574 + }, + { + "name": "minecraft:prismarine_stairs", + "id": -2 + }, + { + "name": "minecraft:prize_pottery_sherd", + "id": 680 + }, + { + "name": "minecraft:pufferfish", + "id": 268 + }, + { + "name": "minecraft:pufferfish_bucket", + "id": 370 + }, + { + "name": "minecraft:pufferfish_spawn_egg", + "id": 484 + }, + { + "name": "minecraft:pumpkin", + "id": 86 + }, + { + "name": "minecraft:pumpkin_pie", + "id": 285 + }, + { + "name": "minecraft:pumpkin_seeds", + "id": 293 + }, + { + "name": "minecraft:pumpkin_stem", + "id": 104 + }, + { + "name": "minecraft:purple_candle", + "id": -423 + }, + { + "name": "minecraft:purple_candle_cake", + "id": -440 + }, + { + "name": "minecraft:purple_carpet", + "id": -606 + }, + { + "name": "minecraft:purple_concrete", + "id": -637 + }, + { + "name": "minecraft:purple_concrete_powder", + "id": -718 + }, + { + "name": "minecraft:purple_dye", + "id": 403 + }, + { + "name": "minecraft:purple_glazed_terracotta", + "id": 219 + }, + { + "name": "minecraft:purple_shulker_box", + "id": -622 + }, + { + "name": "minecraft:purple_stained_glass", + "id": -682 + }, + { + "name": "minecraft:purple_stained_glass_pane", + "id": -652 + }, + { + "name": "minecraft:purple_terracotta", + "id": -733 + }, + { + "name": "minecraft:purple_wool", + "id": -564 + }, + { + "name": "minecraft:purpur_block", + "id": 201 + }, + { + "name": "minecraft:purpur_stairs", + "id": 203 + }, + { + "name": "minecraft:quartz", + "id": 533 + }, + { + "name": "minecraft:quartz_block", + "id": 155 + }, + { + "name": "minecraft:quartz_bricks", + "id": -304 + }, + { + "name": "minecraft:quartz_ore", + "id": 153 + }, + { + "name": "minecraft:quartz_stairs", + "id": 156 + }, + { + "name": "minecraft:rabbit", + "id": 289 + }, + { + "name": "minecraft:rabbit_foot", + "id": 537 + }, + { + "name": "minecraft:rabbit_hide", + "id": 538 + }, + { + "name": "minecraft:rabbit_spawn_egg", + "id": 462 + }, + { + "name": "minecraft:rabbit_stew", + "id": 291 + }, + { + "name": "minecraft:rail", + "id": 66 + }, + { + "name": "minecraft:raiser_armor_trim_smithing_template", + "id": 700 + }, + { + "name": "minecraft:rapid_fertilizer", + "id": 606 + }, + { + "name": "minecraft:ravager_spawn_egg", + "id": 496 + }, + { + "name": "minecraft:raw_copper", + "id": 516 + }, + { + "name": "minecraft:raw_copper_block", + "id": -452 + }, + { + "name": "minecraft:raw_gold", + "id": 515 + }, + { + "name": "minecraft:raw_gold_block", + "id": -453 + }, + { + "name": "minecraft:raw_iron", + "id": 514 + }, + { + "name": "minecraft:raw_iron_block", + "id": -451 + }, + { + "name": "minecraft:recovery_compass", + "id": 655 + }, + { + "name": "minecraft:red_candle", + "id": -427 + }, + { + "name": "minecraft:red_candle_cake", + "id": -444 + }, + { + "name": "minecraft:red_carpet", + "id": -610 + }, + { + "name": "minecraft:red_concrete", + "id": -641 + }, + { + "name": "minecraft:red_concrete_powder", + "id": -722 + }, + { + "name": "minecraft:red_dye", + "id": 399 + }, + { + "name": "minecraft:red_flower", + "id": 38 + }, + { + "name": "minecraft:red_glazed_terracotta", + "id": 234 + }, + { + "name": "minecraft:red_mushroom", + "id": 40 + }, + { + "name": "minecraft:red_mushroom_block", + "id": 100 + }, + { + "name": "minecraft:red_nether_brick", + "id": 215 + }, + { + "name": "minecraft:red_nether_brick_stairs", + "id": -184 + }, + { + "name": "minecraft:red_sandstone", + "id": 179 + }, + { + "name": "minecraft:red_sandstone_stairs", + "id": 180 + }, + { + "name": "minecraft:red_shulker_box", + "id": -626 + }, + { + "name": "minecraft:red_stained_glass", + "id": -686 + }, + { + "name": "minecraft:red_stained_glass_pane", + "id": -656 + }, + { + "name": "minecraft:red_terracotta", + "id": -737 + }, + { + "name": "minecraft:red_wool", + "id": -556 + }, + { + "name": "minecraft:redstone", + "id": 376 + }, + { + "name": "minecraft:redstone_block", + "id": 152 + }, + { + "name": "minecraft:redstone_lamp", + "id": 123 + }, + { + "name": "minecraft:redstone_ore", + "id": 73 + }, + { + "name": "minecraft:redstone_torch", + "id": 76 + }, + { + "name": "minecraft:redstone_wire", + "id": 55 + }, + { + "name": "minecraft:reinforced_deepslate", + "id": -466 + }, + { + "name": "minecraft:repeater", + "id": 422 + }, + { + "name": "minecraft:repeating_command_block", + "id": 188 + }, + { + "name": "minecraft:reserved6", + "id": 255 + }, + { + "name": "minecraft:respawn_anchor", + "id": -272 + }, + { + "name": "minecraft:rib_armor_trim_smithing_template", + "id": 696 + }, + { + "name": "minecraft:rotten_flesh", + "id": 278 + }, + { + "name": "minecraft:saddle", + "id": 374 + }, + { + "name": "minecraft:salmon", + "id": 266 + }, + { + "name": "minecraft:salmon_bucket", + "id": 368 + }, + { + "name": "minecraft:salmon_spawn_egg", + "id": 485 + }, + { + "name": "minecraft:sand", + "id": 12 + }, + { + "name": "minecraft:sandstone", + "id": 24 + }, + { + "name": "minecraft:sandstone_stairs", + "id": 128 + }, + { + "name": "minecraft:sapling", + "id": 6 + }, + { + "name": "minecraft:scaffolding", + "id": -165 + }, + { + "name": "minecraft:sculk", + "id": -458 + }, + { + "name": "minecraft:sculk_catalyst", + "id": -460 + }, + { + "name": "minecraft:sculk_sensor", + "id": -307 + }, + { + "name": "minecraft:sculk_shrieker", + "id": -461 + }, + { + "name": "minecraft:sculk_vein", + "id": -459 + }, + { + "name": "minecraft:sea_lantern", + "id": 169 + }, + { + "name": "minecraft:sea_pickle", + "id": -156 + }, + { + "name": "minecraft:seagrass", + "id": -130 + }, + { + "name": "minecraft:sentry_armor_trim_smithing_template", + "id": 687 + }, + { + "name": "minecraft:shaper_armor_trim_smithing_template", + "id": 701 + }, + { + "name": "minecraft:sheaf_pottery_sherd", + "id": 681 + }, + { + "name": "minecraft:shears", + "id": 424 + }, + { + "name": "minecraft:sheep_spawn_egg", + "id": 441 + }, + { + "name": "minecraft:shelter_pottery_sherd", + "id": 682 + }, + { + "name": "minecraft:shield", + "id": 358 + }, + { + "name": "minecraft:shroomlight", + "id": -230 + }, + { + "name": "minecraft:shulker_box", + "id": 720 + }, + { + "name": "minecraft:shulker_shell", + "id": 575 + }, + { + "name": "minecraft:shulker_spawn_egg", + "id": 472 + }, + { + "name": "minecraft:silence_armor_trim_smithing_template", + "id": 698 + }, + { + "name": "minecraft:silver_glazed_terracotta", + "id": 228 + }, + { + "name": "minecraft:silverfish_spawn_egg", + "id": 446 + }, + { + "name": "minecraft:skeleton_horse_spawn_egg", + "id": 470 + }, + { + "name": "minecraft:skeleton_spawn_egg", + "id": 447 + }, + { + "name": "minecraft:skull", + "id": 525 + }, + { + "name": "minecraft:skull_banner_pattern", + "id": 592 + }, + { + "name": "minecraft:skull_pottery_sherd", + "id": 683 + }, + { + "name": "minecraft:slime", + "id": 165 + }, + { + "name": "minecraft:slime_ball", + "id": 391 + }, + { + "name": "minecraft:slime_spawn_egg", + "id": 448 + }, + { + "name": "minecraft:small_amethyst_bud", + "id": -332 + }, + { + "name": "minecraft:small_dripleaf_block", + "id": -336 + }, + { + "name": "minecraft:smithing_table", + "id": -202 + }, + { + "name": "minecraft:smoker", + "id": -198 + }, + { + "name": "minecraft:smooth_basalt", + "id": -377 + }, + { + "name": "minecraft:smooth_quartz_stairs", + "id": -185 + }, + { + "name": "minecraft:smooth_red_sandstone_stairs", + "id": -176 + }, + { + "name": "minecraft:smooth_sandstone_stairs", + "id": -177 + }, + { + "name": "minecraft:smooth_stone", + "id": -183 + }, + { + "name": "minecraft:sniffer_egg", + "id": -596 + }, + { + "name": "minecraft:sniffer_spawn_egg", + "id": 503 + }, + { + "name": "minecraft:snort_pottery_sherd", + "id": 684 + }, + { + "name": "minecraft:snout_armor_trim_smithing_template", + "id": 695 + }, + { + "name": "minecraft:snow", + "id": 80 + }, + { + "name": "minecraft:snow_golem_spawn_egg", + "id": 509 + }, + { + "name": "minecraft:snow_layer", + "id": 78 + }, + { + "name": "minecraft:snowball", + "id": 377 + }, + { + "name": "minecraft:soul_campfire", + "id": 631 + }, + { + "name": "minecraft:soul_fire", + "id": -237 + }, + { + "name": "minecraft:soul_lantern", + "id": -269 + }, + { + "name": "minecraft:soul_sand", + "id": 88 + }, + { + "name": "minecraft:soul_soil", + "id": -236 + }, + { + "name": "minecraft:soul_torch", + "id": -268 + }, + { + "name": "minecraft:sparkler", + "id": 609 + }, + { + "name": "minecraft:spawn_egg", + "id": 726 + }, + { + "name": "minecraft:spider_eye", + "id": 279 + }, + { + "name": "minecraft:spider_spawn_egg", + "id": 449 + }, + { + "name": "minecraft:spire_armor_trim_smithing_template", + "id": 697 + }, + { + "name": "minecraft:splash_potion", + "id": 570 + }, + { + "name": "minecraft:sponge", + "id": 19 + }, + { + "name": "minecraft:spore_blossom", + "id": -321 + }, + { + "name": "minecraft:spruce_boat", + "id": 381 + }, + { + "name": "minecraft:spruce_button", + "id": -144 + }, + { + "name": "minecraft:spruce_chest_boat", + "id": 650 + }, + { + "name": "minecraft:spruce_door", + "id": 562 + }, + { + "name": "minecraft:spruce_fence", + "id": -579 + }, + { + "name": "minecraft:spruce_fence_gate", + "id": 183 + }, + { + "name": "minecraft:spruce_hanging_sign", + "id": -501 + }, + { + "name": "minecraft:spruce_log", + "id": -569 + }, + { + "name": "minecraft:spruce_planks", + "id": -739 + }, + { + "name": "minecraft:spruce_pressure_plate", + "id": -154 + }, + { + "name": "minecraft:spruce_sign", + "id": 585 + }, + { + "name": "minecraft:spruce_stairs", + "id": 134 + }, + { + "name": "minecraft:spruce_standing_sign", + "id": -181 + }, + { + "name": "minecraft:spruce_trapdoor", + "id": -149 + }, + { + "name": "minecraft:spruce_wall_sign", + "id": -182 + }, + { + "name": "minecraft:spyglass", + "id": 634 + }, + { + "name": "minecraft:squid_spawn_egg", + "id": 453 + }, + { + "name": "minecraft:stained_glass", + "id": 718 + }, + { + "name": "minecraft:stained_glass_pane", + "id": 719 + }, + { + "name": "minecraft:stained_hardened_clay", + "id": 704 + }, + { + "name": "minecraft:standing_banner", + "id": 176 + }, + { + "name": "minecraft:standing_sign", + "id": 63 + }, + { + "name": "minecraft:stick", + "id": 323 + }, + { + "name": "minecraft:sticky_piston", + "id": 29 + }, + { + "name": "minecraft:sticky_piston_arm_collision", + "id": -217 + }, + { + "name": "minecraft:stone", + "id": 1 + }, + { + "name": "minecraft:stone_axe", + "id": 318 + }, + { + "name": "minecraft:stone_block_slab", + "id": 44 + }, + { + "name": "minecraft:stone_block_slab2", + "id": 182 + }, + { + "name": "minecraft:stone_block_slab3", + "id": -162 + }, + { + "name": "minecraft:stone_block_slab4", + "id": -166 + }, + { + "name": "minecraft:stone_brick_stairs", + "id": 109 + }, + { + "name": "minecraft:stone_button", + "id": 77 + }, + { + "name": "minecraft:stone_hoe", + "id": 333 + }, + { + "name": "minecraft:stone_pickaxe", + "id": 317 + }, + { + "name": "minecraft:stone_pressure_plate", + "id": 70 + }, + { + "name": "minecraft:stone_shovel", + "id": 316 + }, + { + "name": "minecraft:stone_stairs", + "id": 67 + }, + { + "name": "minecraft:stone_sword", + "id": 315 + }, + { + "name": "minecraft:stonebrick", + "id": 98 + }, + { + "name": "minecraft:stonecutter", + "id": 245 + }, + { + "name": "minecraft:stonecutter_block", + "id": -197 + }, + { + "name": "minecraft:stray_spawn_egg", + "id": 465 + }, + { + "name": "minecraft:strider_spawn_egg", + "id": 498 + }, + { + "name": "minecraft:string", + "id": 329 + }, + { + "name": "minecraft:stripped_acacia_log", + "id": -8 + }, + { + "name": "minecraft:stripped_bamboo_block", + "id": -528 + }, + { + "name": "minecraft:stripped_birch_log", + "id": -6 + }, + { + "name": "minecraft:stripped_cherry_log", + "id": -535 + }, + { + "name": "minecraft:stripped_cherry_wood", + "id": -545 + }, + { + "name": "minecraft:stripped_crimson_hyphae", + "id": -300 + }, + { + "name": "minecraft:stripped_crimson_stem", + "id": -240 + }, + { + "name": "minecraft:stripped_dark_oak_log", + "id": -9 + }, + { + "name": "minecraft:stripped_jungle_log", + "id": -7 + }, + { + "name": "minecraft:stripped_mangrove_log", + "id": -485 + }, + { + "name": "minecraft:stripped_mangrove_wood", + "id": -498 + }, + { + "name": "minecraft:stripped_oak_log", + "id": -10 + }, + { + "name": "minecraft:stripped_spruce_log", + "id": -5 + }, + { + "name": "minecraft:stripped_warped_hyphae", + "id": -301 + }, + { + "name": "minecraft:stripped_warped_stem", + "id": -241 + }, + { + "name": "minecraft:structure_block", + "id": 252 + }, + { + "name": "minecraft:structure_void", + "id": 217 + }, + { + "name": "minecraft:sugar", + "id": 419 + }, + { + "name": "minecraft:sugar_cane", + "id": 388 + }, + { + "name": "minecraft:suspicious_gravel", + "id": -573 + }, + { + "name": "minecraft:suspicious_sand", + "id": -529 + }, + { + "name": "minecraft:suspicious_stew", + "id": 599 + }, + { + "name": "minecraft:sweet_berries", + "id": 288 + }, + { + "name": "minecraft:sweet_berry_bush", + "id": -207 + }, + { + "name": "minecraft:tadpole_bucket", + "id": 639 + }, + { + "name": "minecraft:tadpole_spawn_egg", + "id": 638 + }, + { + "name": "minecraft:tallgrass", + "id": 31 + }, + { + "name": "minecraft:target", + "id": -239 + }, + { + "name": "minecraft:tide_armor_trim_smithing_template", + "id": 694 + }, + { + "name": "minecraft:tinted_glass", + "id": -334 + }, + { + "name": "minecraft:tnt", + "id": 46 + }, + { + "name": "minecraft:tnt_minecart", + "id": 534 + }, + { + "name": "minecraft:torch", + "id": 50 + }, + { + "name": "minecraft:torchflower", + "id": -568 + }, + { + "name": "minecraft:torchflower_crop", + "id": -567 + }, + { + "name": "minecraft:torchflower_seeds", + "id": 297 + }, + { + "name": "minecraft:totem_of_undying", + "id": 577 + }, + { + "name": "minecraft:trader_llama_spawn_egg", + "id": 657 + }, + { + "name": "minecraft:trapdoor", + "id": 96 + }, + { + "name": "minecraft:trapped_chest", + "id": 146 + }, + { + "name": "minecraft:trial_key", + "id": 705 + }, + { + "name": "minecraft:trial_spawner", + "id": -315 + }, + { + "name": "minecraft:trident", + "id": 555 + }, + { + "name": "minecraft:trip_wire", + "id": 132 + }, + { + "name": "minecraft:tripwire_hook", + "id": 131 + }, + { + "name": "minecraft:tropical_fish", + "id": 267 + }, + { + "name": "minecraft:tropical_fish_bucket", + "id": 369 + }, + { + "name": "minecraft:tropical_fish_spawn_egg", + "id": 482 + }, + { + "name": "minecraft:tube_coral", + "id": -131 + }, + { + "name": "minecraft:tuff", + "id": -333 + }, + { + "name": "minecraft:tuff_brick_double_slab", + "id": -756 + }, + { + "name": "minecraft:tuff_brick_slab", + "id": -755 + }, + { + "name": "minecraft:tuff_brick_stairs", + "id": -757 + }, + { + "name": "minecraft:tuff_brick_wall", + "id": -758 + }, + { + "name": "minecraft:tuff_bricks", + "id": -754 + }, + { + "name": "minecraft:tuff_double_slab", + "id": -745 + }, + { + "name": "minecraft:tuff_slab", + "id": -744 + }, + { + "name": "minecraft:tuff_stairs", + "id": -746 + }, + { + "name": "minecraft:tuff_wall", + "id": -747 + }, + { + "name": "minecraft:turtle_egg", + "id": -159 + }, + { + "name": "minecraft:turtle_helmet", + "id": 582 + }, + { + "name": "minecraft:turtle_scute", + "id": 581 + }, + { + "name": "minecraft:turtle_spawn_egg", + "id": 488 + }, + { + "name": "minecraft:twisting_vines", + "id": -287 + }, + { + "name": "minecraft:underwater_torch", + "id": 239 + }, + { + "name": "minecraft:undyed_shulker_box", + "id": 205 + }, + { + "name": "minecraft:unknown", + "id": -305 + }, + { + "name": "minecraft:unlit_redstone_torch", + "id": 75 + }, + { + "name": "minecraft:unpowered_comparator", + "id": 149 + }, + { + "name": "minecraft:unpowered_repeater", + "id": 93 + }, + { + "name": "minecraft:verdant_froglight", + "id": -470 + }, + { + "name": "minecraft:vex_armor_trim_smithing_template", + "id": 693 + }, + { + "name": "minecraft:vex_spawn_egg", + "id": 479 + }, + { + "name": "minecraft:villager_spawn_egg", + "id": 452 + }, + { + "name": "minecraft:vindicator_spawn_egg", + "id": 477 + }, + { + "name": "minecraft:vine", + "id": 106 + }, + { + "name": "minecraft:wall_banner", + "id": 177 + }, + { + "name": "minecraft:wall_sign", + "id": 68 + }, + { + "name": "minecraft:wandering_trader_spawn_egg", + "id": 495 + }, + { + "name": "minecraft:ward_armor_trim_smithing_template", + "id": 691 + }, + { + "name": "minecraft:warden_spawn_egg", + "id": 641 + }, + { + "name": "minecraft:warped_button", + "id": -261 + }, + { + "name": "minecraft:warped_door", + "id": 626 + }, + { + "name": "minecraft:warped_double_slab", + "id": -267 + }, + { + "name": "minecraft:warped_fence", + "id": -257 + }, + { + "name": "minecraft:warped_fence_gate", + "id": -259 + }, + { + "name": "minecraft:warped_fungus", + "id": -229 + }, + { + "name": "minecraft:warped_fungus_on_a_stick", + "id": 627 + }, + { + "name": "minecraft:warped_hanging_sign", + "id": -507 + }, + { + "name": "minecraft:warped_hyphae", + "id": -298 + }, + { + "name": "minecraft:warped_nylium", + "id": -233 + }, + { + "name": "minecraft:warped_planks", + "id": -243 + }, + { + "name": "minecraft:warped_pressure_plate", + "id": -263 + }, + { + "name": "minecraft:warped_roots", + "id": -224 + }, + { + "name": "minecraft:warped_sign", + "id": 624 + }, + { + "name": "minecraft:warped_slab", + "id": -265 + }, + { + "name": "minecraft:warped_stairs", + "id": -255 + }, + { + "name": "minecraft:warped_standing_sign", + "id": -251 + }, + { + "name": "minecraft:warped_stem", + "id": -226 + }, + { + "name": "minecraft:warped_trapdoor", + "id": -247 + }, + { + "name": "minecraft:warped_wall_sign", + "id": -253 + }, + { + "name": "minecraft:warped_wart_block", + "id": -227 + }, + { + "name": "minecraft:water", + "id": 9 + }, + { + "name": "minecraft:water_bucket", + "id": 365 + }, + { + "name": "minecraft:waterlily", + "id": 111 + }, + { + "name": "minecraft:waxed_chiseled_copper", + "id": -764 + }, + { + "name": "minecraft:waxed_copper", + "id": -344 + }, + { + "name": "minecraft:waxed_copper_bulb", + "id": -780 + }, + { + "name": "minecraft:waxed_copper_door", + "id": -788 + }, + { + "name": "minecraft:waxed_copper_grate", + "id": -772 + }, + { + "name": "minecraft:waxed_copper_trapdoor", + "id": -796 + }, + { + "name": "minecraft:waxed_cut_copper", + "id": -351 + }, + { + "name": "minecraft:waxed_cut_copper_slab", + "id": -365 + }, + { + "name": "minecraft:waxed_cut_copper_stairs", + "id": -358 + }, + { + "name": "minecraft:waxed_double_cut_copper_slab", + "id": -372 + }, + { + "name": "minecraft:waxed_exposed_chiseled_copper", + "id": -765 + }, + { + "name": "minecraft:waxed_exposed_copper", + "id": -345 + }, + { + "name": "minecraft:waxed_exposed_copper_bulb", + "id": -781 + }, + { + "name": "minecraft:waxed_exposed_copper_door", + "id": -789 + }, + { + "name": "minecraft:waxed_exposed_copper_grate", + "id": -773 + }, + { + "name": "minecraft:waxed_exposed_copper_trapdoor", + "id": -797 + }, + { + "name": "minecraft:waxed_exposed_cut_copper", + "id": -352 + }, + { + "name": "minecraft:waxed_exposed_cut_copper_slab", + "id": -366 + }, + { + "name": "minecraft:waxed_exposed_cut_copper_stairs", + "id": -359 + }, + { + "name": "minecraft:waxed_exposed_double_cut_copper_slab", + "id": -373 + }, + { + "name": "minecraft:waxed_oxidized_chiseled_copper", + "id": -766 + }, + { + "name": "minecraft:waxed_oxidized_copper", + "id": -446 + }, + { + "name": "minecraft:waxed_oxidized_copper_bulb", + "id": -783 + }, + { + "name": "minecraft:waxed_oxidized_copper_door", + "id": -791 + }, + { + "name": "minecraft:waxed_oxidized_copper_grate", + "id": -775 + }, + { + "name": "minecraft:waxed_oxidized_copper_trapdoor", + "id": -799 + }, + { + "name": "minecraft:waxed_oxidized_cut_copper", + "id": -447 + }, + { + "name": "minecraft:waxed_oxidized_cut_copper_slab", + "id": -449 + }, + { + "name": "minecraft:waxed_oxidized_cut_copper_stairs", + "id": -448 + }, + { + "name": "minecraft:waxed_oxidized_double_cut_copper_slab", + "id": -450 + }, + { + "name": "minecraft:waxed_weathered_chiseled_copper", + "id": -767 + }, + { + "name": "minecraft:waxed_weathered_copper", + "id": -346 + }, + { + "name": "minecraft:waxed_weathered_copper_bulb", + "id": -782 + }, + { + "name": "minecraft:waxed_weathered_copper_door", + "id": -790 + }, + { + "name": "minecraft:waxed_weathered_copper_grate", + "id": -774 + }, + { + "name": "minecraft:waxed_weathered_copper_trapdoor", + "id": -798 + }, + { + "name": "minecraft:waxed_weathered_cut_copper", + "id": -353 + }, + { + "name": "minecraft:waxed_weathered_cut_copper_slab", + "id": -367 + }, + { + "name": "minecraft:waxed_weathered_cut_copper_stairs", + "id": -360 + }, + { + "name": "minecraft:waxed_weathered_double_cut_copper_slab", + "id": -374 + }, + { + "name": "minecraft:wayfinder_armor_trim_smithing_template", + "id": 699 + }, + { + "name": "minecraft:weathered_chiseled_copper", + "id": -762 + }, + { + "name": "minecraft:weathered_copper", + "id": -342 + }, + { + "name": "minecraft:weathered_copper_bulb", + "id": -778 + }, + { + "name": "minecraft:weathered_copper_door", + "id": -786 + }, + { + "name": "minecraft:weathered_copper_grate", + "id": -770 + }, + { + "name": "minecraft:weathered_copper_trapdoor", + "id": -794 + }, + { + "name": "minecraft:weathered_cut_copper", + "id": -349 + }, + { + "name": "minecraft:weathered_cut_copper_slab", + "id": -363 + }, + { + "name": "minecraft:weathered_cut_copper_stairs", + "id": -356 + }, + { + "name": "minecraft:weathered_double_cut_copper_slab", + "id": -370 + }, + { + "name": "minecraft:web", + "id": 30 + }, + { + "name": "minecraft:weeping_vines", + "id": -231 + }, + { + "name": "minecraft:wheat", + "id": 337 + }, + { + "name": "minecraft:wheat_seeds", + "id": 292 + }, + { + "name": "minecraft:white_candle", + "id": -413 + }, + { + "name": "minecraft:white_candle_cake", + "id": -430 + }, + { + "name": "minecraft:white_carpet", + "id": 171 + }, + { + "name": "minecraft:white_concrete", + "id": 236 + }, + { + "name": "minecraft:white_concrete_powder", + "id": 237 + }, + { + "name": "minecraft:white_dye", + "id": 413 + }, + { + "name": "minecraft:white_glazed_terracotta", + "id": 220 + }, + { + "name": "minecraft:white_shulker_box", + "id": 218 + }, + { + "name": "minecraft:white_stained_glass", + "id": 241 + }, + { + "name": "minecraft:white_stained_glass_pane", + "id": 160 + }, + { + "name": "minecraft:white_terracotta", + "id": 159 + }, + { + "name": "minecraft:white_wool", + "id": 35 + }, + { + "name": "minecraft:wild_armor_trim_smithing_template", + "id": 690 + }, + { + "name": "minecraft:witch_spawn_egg", + "id": 455 + }, + { + "name": "minecraft:wither_rose", + "id": -216 + }, + { + "name": "minecraft:wither_skeleton_spawn_egg", + "id": 467 + }, + { + "name": "minecraft:wither_spawn_egg", + "id": 511 + }, + { + "name": "minecraft:wolf_armor", + "id": 708 + }, + { + "name": "minecraft:wolf_spawn_egg", + "id": 442 + }, + { + "name": "minecraft:wood", + "id": -212 + }, + { + "name": "minecraft:wooden_axe", + "id": 314 + }, + { + "name": "minecraft:wooden_button", + "id": 143 + }, + { + "name": "minecraft:wooden_door", + "id": 362 + }, + { + "name": "minecraft:wooden_hoe", + "id": 332 + }, + { + "name": "minecraft:wooden_pickaxe", + "id": 313 + }, + { + "name": "minecraft:wooden_pressure_plate", + "id": 72 + }, + { + "name": "minecraft:wooden_shovel", + "id": 312 + }, + { + "name": "minecraft:wooden_slab", + "id": 158 + }, + { + "name": "minecraft:wooden_sword", + "id": 311 + }, + { + "name": "minecraft:wool", + "id": 709 + }, + { + "name": "minecraft:writable_book", + "id": 519 + }, + { + "name": "minecraft:written_book", + "id": 520 + }, + { + "name": "minecraft:yellow_candle", + "id": -417 + }, + { + "name": "minecraft:yellow_candle_cake", + "id": -434 + }, + { + "name": "minecraft:yellow_carpet", + "id": -600 + }, + { + "name": "minecraft:yellow_concrete", + "id": -631 + }, + { + "name": "minecraft:yellow_concrete_powder", + "id": -712 + }, + { + "name": "minecraft:yellow_dye", + "id": 409 + }, + { + "name": "minecraft:yellow_flower", + "id": 37 + }, + { + "name": "minecraft:yellow_glazed_terracotta", + "id": 224 + }, + { + "name": "minecraft:yellow_shulker_box", + "id": -616 + }, + { + "name": "minecraft:yellow_stained_glass", + "id": -676 + }, + { + "name": "minecraft:yellow_stained_glass_pane", + "id": -646 + }, + { + "name": "minecraft:yellow_terracotta", + "id": -727 + }, + { + "name": "minecraft:yellow_wool", + "id": -558 + }, + { + "name": "minecraft:zoglin_spawn_egg", + "id": 501 + }, + { + "name": "minecraft:zombie_horse_spawn_egg", + "id": 471 + }, + { + "name": "minecraft:zombie_pigman_spawn_egg", + "id": 451 + }, + { + "name": "minecraft:zombie_spawn_egg", + "id": 450 + }, + { + "name": "minecraft:zombie_villager_spawn_egg", + "id": 480 + } +] \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index d3e425239..14a224a3a 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -9,10 +9,10 @@ netty = "4.1.103.Final" guava = "29.0-jre" gson = "2.3.1" # Provided by Spigot 1.8.8 websocket = "1.5.1" -protocol = "3.0.0.Beta1-20231206.150507-114" -protocol-connection = "3.0.0.Beta1-20231206.150507-113" +protocol = "3.0.0.Beta1-20240204.134050-120" +protocol-connection = "3.0.0.Beta1-20240204.134050-119" raknet = "1.0.0.CR1-20231206.145325-12" -blockstateupdater="1.20.50-20231106.161340-1" +blockstateupdater="1.20.60-20240129.140535-1" mcauthlib = "d9d773e" mcprotocollib = "1.20.4-2-20240116.220521-7" adventure = "4.14.0" From fa339d37b52f633f25b4e7dabeea1ca91fabef43 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 7 Feb 2024 08:32:04 +0100 Subject: [PATCH 80/86] Update version in readme (#4420) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index bdd8cbe98..d58e2eb58 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ The ultimate goal of this project is to allow Minecraft: Bedrock Edition users t Special thanks to the DragonProxy project for being a trailblazer in protocol translation and for all the team members who have joined us here! -### Currently supporting Minecraft Bedrock 1.20.40 - 1.20.51 and Minecraft Java 1.20.4 +### Currently supporting Minecraft Bedrock 1.20.40 - 1.20.61 and Minecraft Java 1.20.4 ## Setting Up Take a look [here](https://wiki.geysermc.org/geyser/setup/) for how to set up Geyser. From e6636ec9fe454d4891d4f56aba8d3e43aeeee17d Mon Sep 17 00:00:00 2001 From: Kas-tle <26531652+Kas-tle@users.noreply.github.com> Date: Wed, 7 Feb 2024 06:15:36 -0800 Subject: [PATCH 81/86] Weapon component is deprecated (#4417) --- .../geyser/registry/populator/CustomItemRegistryPopulator.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index e1d67399f..433b732a8 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -348,7 +348,6 @@ public class CustomItemRegistryPopulator { if (toolType.equals("sword")) { miningSpeed = 1.5f; canDestroyInCreative = false; - componentBuilder.putCompound("minecraft:weapon", NbtMap.EMPTY); } itemProperties.putBoolean("hand_equipped", true); From 63fd97ab322faa52fbb1e201d274f0036b5db50c Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 7 Feb 2024 18:17:51 +0100 Subject: [PATCH 82/86] Fix: Crashing due to custom bows/crossbows/tridents (#4421) * initial stab at fixing crashing due to removal of the chargeable component * remove hardcoded animation --- .../CustomItemRegistryPopulator.java | 86 +++++++++++++++++-- 1 file changed, 77 insertions(+), 9 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java index 433b732a8..c1f1bb10c 100644 --- a/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java +++ b/core/src/main/java/org/geysermc/geyser/registry/populator/CustomItemRegistryPopulator.java @@ -177,7 +177,7 @@ public class CustomItemRegistryPopulator { itemProperties.putBoolean("can_destroy_in_creative", canDestroyInCreative); if (mapping.getArmorType() != null) { - computeArmorProperties(mapping.getArmorType(), mapping.getProtectionValue(), componentBuilder); + computeArmorProperties(mapping.getArmorType(), mapping.getProtectionValue(), itemProperties, componentBuilder); } if (mapping.getFirstBlockRuntimeId() != null) { @@ -194,7 +194,7 @@ public class CustomItemRegistryPopulator { switch (mapping.getBedrockIdentifier()) { case "minecraft:fire_charge", "minecraft:flint_and_steel" -> computeBlockItemProperties("minecraft:fire", componentBuilder); - case "minecraft:bow", "minecraft:crossbow", "minecraft:trident" -> computeChargeableProperties(itemProperties, componentBuilder); + case "minecraft:bow", "minecraft:crossbow", "minecraft:trident" -> computeChargeableProperties(itemProperties, componentBuilder, mapping.getBedrockIdentifier(), protocolVersion); case "minecraft:honey_bottle", "minecraft:milk_bucket", "minecraft:potion" -> computeConsumableProperties(itemProperties, componentBuilder, 2, true); case "minecraft:experience_bottle", "minecraft:egg", "minecraft:ender_pearl", "minecraft:ender_eye", "minecraft:lingering_potion", "minecraft:snowball", "minecraft:splash_potion" -> computeThrowableProperties(componentBuilder); @@ -223,13 +223,13 @@ public class CustomItemRegistryPopulator { boolean canDestroyInCreative = true; if (customItemData.toolType() != null) { // This is not using the isTool boolean because it is not just a render type here. - canDestroyInCreative = computeToolProperties(customItemData.toolType(), itemProperties, componentBuilder); + canDestroyInCreative = computeToolProperties(Objects.requireNonNull(customItemData.toolType()), itemProperties, componentBuilder); } itemProperties.putBoolean("can_destroy_in_creative", canDestroyInCreative); String armorType = customItemData.armorType(); if (armorType != null) { - computeArmorProperties(armorType, customItemData.protectionValue(), componentBuilder); + computeArmorProperties(armorType, customItemData.protectionValue(), itemProperties, componentBuilder); } if (customItemData.isEdible()) { @@ -237,7 +237,11 @@ public class CustomItemRegistryPopulator { } if (customItemData.isChargeable()) { - computeChargeableProperties(itemProperties, componentBuilder); + String tooltype = customItemData.toolType(); + if (tooltype == null) { + throw new IllegalArgumentException("tool type must be set if the custom item is chargeable!"); + } + computeChargeableProperties(itemProperties, componentBuilder, "minecraft:" + tooltype, protocolVersion); } computeRenderOffsets(isHat, customItemData, componentBuilder); @@ -353,10 +357,14 @@ public class CustomItemRegistryPopulator { itemProperties.putBoolean("hand_equipped", true); itemProperties.putFloat("mining_speed", miningSpeed); + // This allows custom tools - shears, swords, shovels, axes etc to be enchanted or combined in the anvil + itemProperties.putInt("enchantable_value", 1); + itemProperties.putString("enchantable_slot", toolType); + return canDestroyInCreative; } - private static void computeArmorProperties(String armorType, int protectionValue, NbtMapBuilder componentBuilder) { + private static void computeArmorProperties(String armorType, int protectionValue, NbtMapBuilder itemProperties, NbtMapBuilder componentBuilder) { switch (armorType) { case "boots" -> { componentBuilder.putString("minecraft:render_offsets", "boots"); @@ -390,13 +398,73 @@ public class CustomItemRegistryPopulator { componentBuilder.putCompound("minecraft:block_placer", NbtMap.builder().putString("block", blockItem).build()); } - private static void computeChargeableProperties(NbtMapBuilder itemProperties, NbtMapBuilder componentBuilder) { + private static void computeChargeableProperties(NbtMapBuilder itemProperties, NbtMapBuilder componentBuilder, String mapping, int protocolVersion) { // setting high use_duration prevents the consume animation from playing itemProperties.putInt("use_duration", Integer.MAX_VALUE); // display item as tool (mainly for crossbow and bow) itemProperties.putBoolean("hand_equipped", true); - // ensure client moves at slow speed while charging (note: this was calculated by hand as the movement modifer value does not seem to scale linearly) - componentBuilder.putCompound("minecraft:chargeable", NbtMap.builder().putFloat("movement_modifier", 0.35F).build()); + // Make bows, tridents, and crossbows enchantable + itemProperties.putInt("enchantable_value", 1); + + if (GameProtocol.is1_20_60orHigher(protocolVersion)) { + componentBuilder.putCompound("minecraft:use_modifiers", NbtMap.builder() + .putFloat("use_duration", 100F) + .putFloat("movement_modifier", 0.35F) + .build()); + + switch (mapping) { + case "minecraft:bow" -> { + itemProperties.putString("enchantable_slot", "bow"); + itemProperties.putInt("frame_count", 3); + + componentBuilder.putCompound("minecraft:shooter", NbtMap.builder() + .putList("ammunition", NbtType.COMPOUND, List.of( + NbtMap.builder() + .putCompound("item", NbtMap.builder() + .putString("name", "minecraft:arrow") + .build()) + .putBoolean("use_offhand", true) + .putBoolean("search_inventory", true) + .build() + )) + .putFloat("max_draw_duration", 0f) + .putBoolean("charge_on_draw", true) + .putBoolean("scale_power_by_draw_duration", true) + .build()); + componentBuilder.putInt("minecraft:use_duration", 999); + } + case "minecraft:trident" -> { + itemProperties.putString("enchantable_slot", "trident"); + componentBuilder.putInt("minecraft:use_duration", 999); + } + case "minecraft:crossbow" -> { + itemProperties.putString("enchantable_slot", "crossbow"); + itemProperties.putInt("frame_count", 10); + + componentBuilder.putCompound("minecraft:shooter", NbtMap.builder() + .putList("ammunition", NbtType.COMPOUND, List.of( + NbtMap.builder() + .putCompound("item", NbtMap.builder() + .putString("name", "minecraft:arrow") + .build()) + .putBoolean("use_offhand", true) + .putBoolean("search_inventory", true) + .build() + )) + .putFloat("max_draw_duration", 1f) + .putBoolean("charge_on_draw", true) + .putBoolean("scale_power_by_draw_duration", true) + .build()); + componentBuilder.putInt("minecraft:use_duration", 999); + } + } + } else { + // ensure client moves at slow speed while charging (note: this was calculated by hand as the movement modifer value does not seem to scale linearly) + componentBuilder.putCompound("minecraft:chargeable", NbtMap.builder().putFloat("movement_modifier", 0.35F).build()); + + // keep item enchantable; also works on 1.20.50 + itemProperties.putString("enchantable_slot", mapping.replace("minecraft:", "")); + } } private static void computeConsumableProperties(NbtMapBuilder itemProperties, NbtMapBuilder componentBuilder, int useAnimation, boolean canAlwaysEat) { From 19c6648bc22200bb939936a9dbbbed5922c74372 Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 8 Feb 2024 17:30:01 +0100 Subject: [PATCH 83/86] Fix: Nametags not showing up (#4427) --- .../org/geysermc/geyser/entity/type/player/PlayerEntity.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java index 37e408502..3578ac82b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java @@ -120,6 +120,9 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { super.initializeMetadata(); // For the OptionalPack, set all bits as invisible by default as this matches Java Edition behavior dirtyMetadata.put(EntityDataTypes.MARK_VARIANT, 0xff); + // Since 1.20.60, the nametag does not show properly if this is not set :/ + // The nametag does disappear properly when the player is invisible though. + dirtyMetadata.put(EntityDataTypes.NAMETAG_ALWAYS_SHOW, (byte) 1); } @Override From 6a51d8298f75cd17cfca66726a0d5e550c3e316c Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 14 Feb 2024 12:50:50 +0100 Subject: [PATCH 84/86] Feature: Rework startup logic (#4377) * This makes `geyser reload` work the same across all platforms. For example, it ensures that we reload the config to the greatest extent possible (with the exception of compression/injection settings). Additionally, this clears up issues where Extensions were previously disabled during reloading - instead, the new Pre and Post reload events allow extensions to reload whatever necessary on their own. --- .../lifecycle/GeyserPostReloadEvent.java | 42 +++ .../event/lifecycle/GeyserPreReloadEvent.java | 42 +++ .../bungeecord/GeyserBungeePlugin.java | 163 +++++++----- .../platform/fabric/GeyserFabricMod.java | 122 ++++----- .../command/GeyserFabricCommandExecutor.java | 4 - .../mixin/client/IntegratedServerMixin.java | 3 +- .../platform/spigot/GeyserSpigotPlugin.java | 248 +++++++++--------- .../standalone/GeyserStandaloneBootstrap.java | 51 ++-- .../standalone/GeyserStandaloneLogger.java | 2 +- .../velocity/GeyserVelocityPlugin.java | 119 +++++---- .../org/geysermc/geyser/GeyserBootstrap.java | 22 +- .../java/org/geysermc/geyser/GeyserImpl.java | 68 +++-- .../geyser/command/GeyserCommandManager.java | 2 +- .../command/defaults/ReloadCommand.java | 2 +- .../geyser/command/defaults/StopCommand.java | 2 +- .../geyser/network/UpstreamPacketHandler.java | 2 +- .../geyser/scoreboard/ScoreboardUpdater.java | 2 +- .../org/geysermc/geyser/util/EntityUtils.java | 1 + 18 files changed, 539 insertions(+), 358 deletions(-) create mode 100644 api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostReloadEvent.java create mode 100644 api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreReloadEvent.java diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostReloadEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostReloadEvent.java new file mode 100644 index 000000000..c421cda37 --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPostReloadEvent.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.lifecycle; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.event.Event; +import org.geysermc.geyser.api.event.EventBus; +import org.geysermc.geyser.api.event.EventRegistrar; +import org.geysermc.geyser.api.extension.ExtensionManager; + +/** + * Called when Geyser finished reloading and is accepting Bedrock connections again. + * Equivalent to the {@link GeyserPostInitializeEvent} + * + * @param extensionManager the extension manager + * @param eventBus the event bus + */ +public record GeyserPostReloadEvent(@NonNull ExtensionManager extensionManager, @NonNull EventBus eventBus) implements Event { +} diff --git a/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreReloadEvent.java b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreReloadEvent.java new file mode 100644 index 000000000..16d5058da --- /dev/null +++ b/api/src/main/java/org/geysermc/geyser/api/event/lifecycle/GeyserPreReloadEvent.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2019-2024 GeyserMC. http://geysermc.org + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * @author GeyserMC + * @link https://github.com/GeyserMC/Geyser + */ + +package org.geysermc.geyser.api.event.lifecycle; + +import org.checkerframework.checker.nullness.qual.NonNull; +import org.geysermc.event.Event; +import org.geysermc.geyser.api.event.EventBus; +import org.geysermc.geyser.api.event.EventRegistrar; +import org.geysermc.geyser.api.extension.ExtensionManager; + +/** + * Called when Geyser is about to reload. Primarily aimed at extensions, so they can decide on their own what to reload. + * After this event is fired, some lifecycle events can be fired again - such as the {@link GeyserLoadResourcePacksEvent}. + * + * @param extensionManager the extension manager + * @param eventBus the event bus + */ +public record GeyserPreReloadEvent(@NonNull ExtensionManager extensionManager, @NonNull EventBus eventBus) implements Event { +} diff --git a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java index c5d5cdacc..4191c8578 100644 --- a/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java +++ b/bootstrap/bungeecord/src/main/java/org/geysermc/geyser/platform/bungeecord/GeyserBungeePlugin.java @@ -32,11 +32,11 @@ import net.md_5.bungee.api.plugin.Plugin; import net.md_5.bungee.protocol.ProtocolConstants; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; -import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.api.command.Command; import org.geysermc.geyser.api.extension.Extension; +import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommandManager; import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.dump.BootstrapDumpInfo; @@ -70,11 +70,13 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { private GeyserImpl geyser; - private static boolean INITIALIZED = false; - - @SuppressWarnings({"JavaReflectionMemberAccess", "ResultOfMethodCallIgnored"}) @Override public void onLoad() { + onGeyserInitialize(); + } + + @Override + public void onGeyserInitialize() { GeyserLocale.init(this); // Copied from ViaVersion. @@ -91,29 +93,62 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { getLogger().warning("/_____________\\"); } - if (!getDataFolder().exists()) - getDataFolder().mkdir(); - - try { - if (!getDataFolder().exists()) - getDataFolder().mkdir(); - File configFile = FileUtils.fileOrCopiedFromResource(new File(getDataFolder(), "config.yml"), - "config.yml", (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this); - this.geyserConfig = FileUtils.loadConfig(configFile, GeyserBungeeConfiguration.class); - } catch (IOException ex) { - getLogger().log(Level.SEVERE, GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex); - ex.printStackTrace(); + if (!this.loadConfig()) { return; } - this.geyserLogger = new GeyserBungeeLogger(getLogger(), geyserConfig.isDebugMode()); GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); - this.geyser = GeyserImpl.load(PlatformType.BUNGEECORD, this); + this.geyserInjector = new GeyserBungeeInjector(this); } @Override public void onEnable() { + // Big hack - Bungee does not provide us an event to listen to, so schedule a repeating + // task that waits for a field to be filled which is set after the plugin enable + // process is complete + this.awaitStartupCompletion(0); + } + + @SuppressWarnings("unchecked") + private void awaitStartupCompletion(int tries) { + // After 20 tries give up waiting. This will happen just after 3 minutes approximately + if (tries >= 20) { + this.geyserLogger.warning("BungeeCord plugin startup is taking abnormally long, so Geyser is starting now. " + + "If all your plugins are loaded properly, this is a bug! " + + "If not, consider cutting down the amount of plugins on your proxy as it is causing abnormally slow starting times."); + this.onGeyserEnable(); + return; + } + + try { + Field listenersField = BungeeCord.getInstance().getClass().getDeclaredField("listeners"); + listenersField.setAccessible(true); + + Collection listeners = (Collection) listenersField.get(BungeeCord.getInstance()); + if (listeners.isEmpty()) { + this.getProxy().getScheduler().schedule(this, this::onGeyserEnable, tries, TimeUnit.SECONDS); + } else { + this.awaitStartupCompletion(++tries); + } + } catch (NoSuchFieldException | IllegalAccessException ex) { + ex.printStackTrace(); + } + } + + public void onGeyserEnable() { + if (GeyserImpl.getInstance().isReloading()) { + if (!loadConfig()) { + return; + } + this.geyserLogger.setDebug(geyserConfig.isDebugMode()); + GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); + } else { + // For consistency with other platforms - create command manager before GeyserImpl#start() + // This ensures the command events are called before the item/block ones are + this.geyserCommandManager = new GeyserCommandManager(geyser); + this.geyserCommandManager.init(); + } // Force-disable query if enabled, or else Geyser won't enable for (ListenerInfo info : getProxy().getConfig().getListeners()) { @@ -133,54 +168,20 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { } } - // Big hack - Bungee does not provide us an event to listen to, so schedule a repeating - // task that waits for a field to be filled which is set after the plugin enable - // process is complete - if (!INITIALIZED) { - this.awaitStartupCompletion(0); - } else { - // No need to "wait" for startup completion, just start Geyser - we're reloading. - this.postStartup(); - } - } + GeyserImpl.start(); - @SuppressWarnings("unchecked") - private void awaitStartupCompletion(int tries) { - // After 20 tries give up waiting. This will happen - // just after 3 minutes approximately - if (tries >= 20) { - this.geyserLogger.warning("BungeeCord plugin startup is taking abnormally long, so Geyser is starting now. " + - "If all your plugins are loaded properly, this is a bug! " + - "If not, consider cutting down the amount of plugins on your proxy as it is causing abnormally slow starting times."); - this.postStartup(); + if (geyserConfig.isLegacyPingPassthrough()) { + this.geyserBungeePingPassthrough = GeyserLegacyPingPassthrough.init(geyser); + } else { + this.geyserBungeePingPassthrough = new GeyserBungeePingPassthrough(getProxy()); + } + + // No need to re-register commands or re-init injector when reloading + if (GeyserImpl.getInstance().isReloading()) { return; } - try { - Field listenersField = BungeeCord.getInstance().getClass().getDeclaredField("listeners"); - listenersField.setAccessible(true); - - Collection listeners = (Collection) listenersField.get(BungeeCord.getInstance()); - if (listeners.isEmpty()) { - this.getProxy().getScheduler().schedule(this, this::postStartup, tries, TimeUnit.SECONDS); - } else { - this.awaitStartupCompletion(++tries); - } - } catch (NoSuchFieldException | IllegalAccessException ex) { - ex.printStackTrace(); - } - } - - private void postStartup() { - GeyserImpl.start(); - - if (!INITIALIZED) { - this.geyserInjector = new GeyserBungeeInjector(this); - this.geyserInjector.initializeLocalChannel(this); - } - - this.geyserCommandManager = new GeyserCommandManager(geyser); - this.geyserCommandManager.init(); + this.geyserInjector.initializeLocalChannel(this); this.getProxy().getPluginManager().registerCommand(this, new GeyserBungeeCommandExecutor("geyser", this.geyser, this.geyserCommandManager.getCommands())); for (Map.Entry> entry : this.geyserCommandManager.extensionCommands().entrySet()) { @@ -191,18 +192,17 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { this.getProxy().getPluginManager().registerCommand(this, new GeyserBungeeCommandExecutor(entry.getKey().description().id(), this.geyser, commands)); } - - if (geyserConfig.isLegacyPingPassthrough()) { - this.geyserBungeePingPassthrough = GeyserLegacyPingPassthrough.init(geyser); - } else { - this.geyserBungeePingPassthrough = new GeyserBungeePingPassthrough(getProxy()); - } - - INITIALIZED = true; } @Override - public void onDisable() { + public void onGeyserDisable() { + if (geyser != null) { + geyser.disable(); + } + } + + @Override + public void onGeyserShutdown() { if (geyser != null) { geyser.shutdown(); } @@ -211,6 +211,11 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { } } + @Override + public void onDisable() { + this.onGeyserShutdown(); + } + @Override public GeyserBungeeConfiguration getGeyserConfig() { return geyserConfig; @@ -278,4 +283,20 @@ public class GeyserBungeePlugin extends Plugin implements GeyserBootstrap { .map(info -> (InetSocketAddress) info.getSocketAddress()) .findFirst(); } + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + private boolean loadConfig() { + try { + if (!getDataFolder().exists()) //noinspection ResultOfMethodCallIgnored + getDataFolder().mkdir(); + File configFile = FileUtils.fileOrCopiedFromResource(new File(getDataFolder(), "config.yml"), + "config.yml", (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this); + this.geyserConfig = FileUtils.loadConfig(configFile, GeyserBungeeConfiguration.class); + } catch (IOException ex) { + getLogger().log(Level.SEVERE, GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex); + ex.printStackTrace(); + return false; + } + return true; + } } diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java index 071409046..756063af7 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/GeyserFabricMod.java @@ -27,6 +27,8 @@ package org.geysermc.geyser.platform.fabric; import com.mojang.brigadier.arguments.StringArgumentType; import com.mojang.brigadier.builder.LiteralArgumentBuilder; +import lombok.Getter; +import lombok.Setter; import net.fabricmc.api.EnvType; import net.fabricmc.api.ModInitializer; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; @@ -66,13 +68,14 @@ import java.util.Optional; import java.util.UUID; public class GeyserFabricMod implements ModInitializer, GeyserBootstrap { + + @Getter private static GeyserFabricMod instance; - - private boolean reloading; - private GeyserImpl geyser; private ModContainer mod; private Path dataFolder; + + @Setter private MinecraftServer server; private GeyserCommandManager geyserCommandManager; @@ -85,64 +88,45 @@ public class GeyserFabricMod implements ModInitializer, GeyserBootstrap { public void onInitialize() { instance = this; mod = FabricLoader.getInstance().getModContainer("geyser-fabric").orElseThrow(); - - this.onEnable(); - if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) { - // Set as an event so we can get the proper IP and port if needed - ServerLifecycleEvents.SERVER_STARTED.register(this::startGeyser); - } + onGeyserInitialize(); } @Override - public void onEnable() { - dataFolder = FabricLoader.getInstance().getConfigDir().resolve("Geyser-Fabric"); - if (!dataFolder.toFile().exists()) { - //noinspection ResultOfMethodCallIgnored - dataFolder.toFile().mkdir(); + public void onGeyserInitialize() { + if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) { + // Set as an event, so we can get the proper IP and port if needed + ServerLifecycleEvents.SERVER_STARTED.register((server) -> { + this.server = server; + onGeyserEnable(); + }); } - // Init dataFolder first as local language overrides call getConfigFolder() - GeyserLocale.init(this); + // These are only registered once + ServerLifecycleEvents.SERVER_STOPPING.register((server) -> onGeyserShutdown()); + ServerPlayConnectionEvents.JOIN.register((handler, $, $$) -> GeyserFabricUpdateListener.onPlayReady(handler)); - try { - File configFile = FileUtils.fileOrCopiedFromResource(dataFolder.resolve("config.yml").toFile(), "config.yml", - (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this); - this.geyserConfig = FileUtils.loadConfig(configFile, GeyserFabricConfiguration.class); - } catch (IOException ex) { - LogManager.getLogger("geyser-fabric").error(GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex); - ex.printStackTrace(); + dataFolder = FabricLoader.getInstance().getConfigDir().resolve("Geyser-Fabric"); + GeyserLocale.init(this); + if (!loadConfig()) { return; } - this.geyserLogger = new GeyserFabricLogger(geyserConfig.isDebugMode()); - GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); - this.geyser = GeyserImpl.load(PlatformType.FABRIC, this); - - if (server == null) { - // Server has yet to start - // Register onDisable so players are properly kicked - ServerLifecycleEvents.SERVER_STOPPING.register((server) -> onDisable()); - - ServerPlayConnectionEvents.JOIN.register((handler, $, $$) -> GeyserFabricUpdateListener.onPlayReady(handler)); - } else { - // Server has started and this is a reload - startGeyser(this.server); - reloading = false; - } } - /** - * Initialize core Geyser. - * A function, as it needs to be called in different places depending on if Geyser is being reloaded or not. - * - * @param server The minecraft server. - */ - public void startGeyser(MinecraftServer server) { - this.server = server; - - GeyserImpl.start(); + @Override + public void onGeyserEnable() { + if (GeyserImpl.getInstance().isReloading()) { + if (!loadConfig()) { + return; + } + this.geyserLogger.setDebug(geyserConfig.isDebugMode()); + GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); + } else { + this.geyserCommandManager = new GeyserCommandManager(geyser); + this.geyserCommandManager.init(); + } if (geyserConfig.isLegacyPingPassthrough()) { this.geyserPingPassthrough = GeyserLegacyPingPassthrough.init(geyser); @@ -150,8 +134,12 @@ public class GeyserFabricMod implements ModInitializer, GeyserBootstrap { this.geyserPingPassthrough = new ModPingPassthrough(server, geyserLogger); } - this.geyserCommandManager = new GeyserCommandManager(geyser); - this.geyserCommandManager.init(); + GeyserImpl.start(); + + // No need to re-register commands, or re-recreate the world manager when reloading + if (GeyserImpl.getInstance().isReloading()) { + return; + } this.geyserWorldManager = new GeyserFabricWorldManager(server); @@ -201,14 +189,19 @@ public class GeyserFabricMod implements ModInitializer, GeyserBootstrap { } @Override - public void onDisable() { + public void onGeyserDisable() { + if (geyser != null) { + geyser.disable(); + } + } + + @Override + public void onGeyserShutdown() { if (geyser != null) { geyser.shutdown(); geyser = null; } - if (!reloading) { - this.server = null; - } + this.server = null; } @Override @@ -291,11 +284,22 @@ public class GeyserFabricMod implements ModInitializer, GeyserBootstrap { } } - public void setReloading(boolean reloading) { - this.reloading = reloading; - } + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + private boolean loadConfig() { + try { + if (!dataFolder.toFile().exists()) { + //noinspection ResultOfMethodCallIgnored + dataFolder.toFile().mkdir(); + } - public static GeyserFabricMod getInstance() { - return instance; + File configFile = FileUtils.fileOrCopiedFromResource(dataFolder.resolve("config.yml").toFile(), "config.yml", + (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this); + this.geyserConfig = FileUtils.loadConfig(configFile, GeyserFabricConfiguration.class); + return true; + } catch (IOException ex) { + LogManager.getLogger("geyser-fabric").error(GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex); + ex.printStackTrace(); + return false; + } } } diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java index 732b28ca7..86b50d431 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/command/GeyserFabricCommandExecutor.java @@ -32,7 +32,6 @@ import net.minecraft.commands.CommandSourceStack; import org.geysermc.geyser.GeyserImpl; import org.geysermc.geyser.command.GeyserCommand; import org.geysermc.geyser.command.GeyserCommandExecutor; -import org.geysermc.geyser.platform.fabric.GeyserFabricMod; import org.geysermc.geyser.session.GeyserSession; import org.geysermc.geyser.text.ChatColor; import org.geysermc.geyser.text.GeyserLocale; @@ -64,9 +63,6 @@ public class GeyserFabricCommandExecutor extends GeyserCommandExecutor implement sender.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.bootstrap.command.permission_fail", sender.locale())); return 0; } - if (this.command.name().equals("reload")) { - GeyserFabricMod.getInstance().setReloading(true); - } if (command.isBedrockOnly() && session == null) { sender.sendMessage(ChatColor.RED + GeyserLocale.getPlayerLocaleString("geyser.bootstrap.command.bedrock_only", sender.locale())); diff --git a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java index af11174dc..999a077bb 100644 --- a/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java +++ b/bootstrap/fabric/src/main/java/org/geysermc/geyser/platform/fabric/mixin/client/IntegratedServerMixin.java @@ -57,7 +57,8 @@ public class IntegratedServerMixin implements GeyserServerPortGetter { private void onOpenToLan(GameType gameType, boolean cheatsAllowed, int port, CallbackInfoReturnable cir) { if (cir.getReturnValueZ()) { // If the LAN is opened, starts Geyser. - GeyserFabricMod.getInstance().startGeyser((MinecraftServer) (Object) this); + GeyserFabricMod.getInstance().setServer((MinecraftServer) (Object) this); + GeyserFabricMod.getInstance().onGeyserEnable(); // Ensure player locale has been loaded, in case it's different from Java system language GeyserLocale.loadGeyserLocale(this.minecraft.options.languageCode); // Give indication that Geyser is loaded diff --git a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java index a2a08c3bf..1bc1718d7 100644 --- a/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java +++ b/bootstrap/spigot/src/main/java/org/geysermc/geyser/platform/spigot/GeyserSpigotPlugin.java @@ -81,10 +81,6 @@ import java.util.UUID; import java.util.logging.Level; public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { - /** - * Determines if the plugin has been ran once before, including before /geyser reload. - */ - private static boolean INITIALIZED = false; private GeyserSpigotCommandManager geyserCommandManager; private GeyserSpigotConfiguration geyserConfig; @@ -102,6 +98,11 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { @Override public void onLoad() { + onGeyserInitialize(); + } + + @Override + public void onGeyserInitialize() { GeyserLocale.init(this); try { @@ -118,6 +119,7 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { getLogger().severe(GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_server.message", "1.13.2")); getLogger().severe(""); getLogger().severe("*********************************************"); + Bukkit.getPluginManager().disablePlugin(this); return; } @@ -131,6 +133,7 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { getLogger().severe(GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_server_type.message", "Paper")); getLogger().severe(""); getLogger().severe("*********************************************"); + Bukkit.getPluginManager().disablePlugin(this); return; } } @@ -143,86 +146,72 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { getLogger().severe("This version of Spigot is using an outdated version of netty. Please use Paper instead!"); getLogger().severe(""); getLogger().severe("*********************************************"); - return; - } - - // This is manually done instead of using Bukkit methods to save the config because otherwise comments get removed - try { - if (!getDataFolder().exists()) { - //noinspection ResultOfMethodCallIgnored - getDataFolder().mkdir(); - } - File configFile = FileUtils.fileOrCopiedFromResource(new File(getDataFolder(), "config.yml"), "config.yml", - (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this); - this.geyserConfig = FileUtils.loadConfig(configFile, GeyserSpigotConfiguration.class); - } catch (IOException ex) { - getLogger().log(Level.SEVERE, GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex); - ex.printStackTrace(); Bukkit.getPluginManager().disablePlugin(this); return; } + if (!loadConfig()) { + return; + } this.geyserLogger = GeyserPaperLogger.supported() ? new GeyserPaperLogger(this, getLogger(), geyserConfig.isDebugMode()) : new GeyserSpigotLogger(getLogger(), geyserConfig.isDebugMode()); - GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); + // Turn "(MC: 1.16.4)" into 1.16.4. + this.minecraftVersion = Bukkit.getServer().getVersion().split("\\(MC: ")[1].split("\\)")[0]; + this.geyser = GeyserImpl.load(PlatformType.SPIGOT, this); } @Override public void onEnable() { - if (this.geyserConfig == null) { - // We failed to initialize correctly - Bukkit.getPluginManager().disablePlugin(this); - return; - } - this.geyserCommandManager = new GeyserSpigotCommandManager(geyser); this.geyserCommandManager.init(); - if (!INITIALIZED) { - // Needs to be an anonymous inner class otherwise Bukkit complains about missing classes - Bukkit.getPluginManager().registerEvents(new Listener() { + // Because Bukkit locks its command map upon startup, we need to + // add our plugin commands in onEnable, but populating the executor + // can happen at any time (later in #onGeyserEnable()) + CommandMap commandMap = GeyserSpigotCommandManager.getCommandMap(); + for (Extension extension : this.geyserCommandManager.extensionCommands().keySet()) { + // Thanks again, Bukkit + try { + Constructor constructor = PluginCommand.class.getDeclaredConstructor(String.class, Plugin.class); + constructor.setAccessible(true); - @EventHandler - public void onServerLoaded(ServerLoadEvent event) { - // Wait until all plugins have loaded so Geyser can start - postStartup(); - } - }, this); + PluginCommand pluginCommand = constructor.newInstance(extension.description().id(), this); + pluginCommand.setDescription("The main command for the " + extension.name() + " Geyser extension!"); - // Because Bukkit locks its command map upon startup, we need to - // add our plugin commands in onEnable, but populating the executor - // can happen at any time - CommandMap commandMap = GeyserSpigotCommandManager.getCommandMap(); - for (Extension extension : this.geyserCommandManager.extensionCommands().keySet()) { - // Thanks again, Bukkit - try { - Constructor constructor = PluginCommand.class.getDeclaredConstructor(String.class, Plugin.class); - constructor.setAccessible(true); - - PluginCommand pluginCommand = constructor.newInstance(extension.description().id(), this); - pluginCommand.setDescription("The main command for the " + extension.name() + " Geyser extension!"); - - commandMap.register(extension.description().id(), "geyserext", pluginCommand); - } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { - this.geyserLogger.error("Failed to construct PluginCommand for extension " + extension.name(), ex); - } + commandMap.register(extension.description().id(), "geyserext", pluginCommand); + } catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException ex) { + this.geyserLogger.error("Failed to construct PluginCommand for extension " + extension.name(), ex); } } - if (INITIALIZED) { - // Reload; continue with post startup - postStartup(); - } + // Needs to be an anonymous inner class otherwise Bukkit complains about missing classes + Bukkit.getPluginManager().registerEvents(new Listener() { + + @EventHandler + public void onServerLoaded(ServerLoadEvent event) { + if (event.getType() == ServerLoadEvent.LoadType.RELOAD) { + geyser.setShuttingDown(false); + } + onGeyserEnable(); + } + }, this); } - private void postStartup() { - GeyserImpl.start(); + public void onGeyserEnable() { + // Configs are loaded once early - so we can create the logger, then load extensions and finally register + // extension commands in #onEnable. To ensure reloading geyser also reloads the geyser config, this exists + if (GeyserImpl.getInstance().isReloading()) { + if (!loadConfig()) { + return; + } + this.geyserLogger.setDebug(this.geyserConfig.isDebugMode()); + GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); + } - // Turn "(MC: 1.16.4)" into 1.16.4. - this.minecraftVersion = Bukkit.getServer().getVersion().split("\\(MC: ")[1].split("\\)")[0]; + GeyserImpl.start(); if (geyserConfig.isLegacyPingPassthrough()) { this.geyserSpigotPingPassthrough = GeyserLegacyPingPassthrough.init(geyser); @@ -238,20 +227,16 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { } geyserLogger.debug("Spigot ping passthrough type: " + (this.geyserSpigotPingPassthrough == null ? null : this.geyserSpigotPingPassthrough.getClass())); - boolean isViaVersion = Bukkit.getPluginManager().getPlugin("ViaVersion") != null; - if (isViaVersion) { - try { - // Ensure that we have the latest 4.0.0 changes and not an older ViaVersion version - Class.forName("com.viaversion.viaversion.api.ViaManager"); - } catch (ClassNotFoundException e) { - GeyserSpigotVersionChecker.sendOutdatedViaVersionMessage(geyserLogger); - isViaVersion = false; - if (this.geyserConfig.isDebugMode()) { - e.printStackTrace(); - } - } + // Don't need to re-create the world manager/re-register commands/reinject when reloading + if (GeyserImpl.getInstance().isReloading()) { + return; } + boolean isViaVersion = Bukkit.getPluginManager().getPlugin("ViaVersion") != null; + + // Check to ensure the current setup can support the protocol version Geyser uses + GeyserSpigotVersionChecker.checkForSupportedProtocol(geyserLogger, isViaVersion); + // We want to do this late in the server startup process to allow plugins such as ViaVersion and ProtocolLib // To do their job injecting, then connect into *that* this.geyserInjector = new GeyserSpigotInjector(isViaVersion); @@ -278,6 +263,7 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { } else { geyserLogger.debug("Not using NMS adapter as it is disabled via system property."); } + if (this.geyserWorldManager == null) { // No NMS adapter this.geyserWorldManager = new GeyserSpigotWorldManager(this); @@ -302,72 +288,72 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { command.setExecutor(new GeyserSpigotCommandExecutor(this.geyser, commands)); } - if (!INITIALIZED) { - // Register permissions so they appear in, for example, LuckPerms' UI - // Re-registering permissions throws an error - for (Map.Entry entry : geyserCommandManager.commands().entrySet()) { + // Register permissions so they appear in, for example, LuckPerms' UI + // Re-registering permissions throws an error + for (Map.Entry entry : geyserCommandManager.commands().entrySet()) { + Command command = entry.getValue(); + if (command.aliases().contains(entry.getKey())) { + // Don't register aliases + continue; + } + + Bukkit.getPluginManager().addPermission(new Permission(command.permission(), + GeyserLocale.getLocaleStringLog(command.description()), + command.isSuggestedOpOnly() ? PermissionDefault.OP : PermissionDefault.TRUE)); + } + + // Register permissions for extension commands + for (Map.Entry> commandEntry : this.geyserCommandManager.extensionCommands().entrySet()) { + for (Map.Entry entry : commandEntry.getValue().entrySet()) { Command command = entry.getValue(); if (command.aliases().contains(entry.getKey())) { // Don't register aliases continue; } + if (command.permission().isBlank()) { + continue; + } + + // Avoid registering the same permission twice, e.g. for the extension help commands + if (Bukkit.getPluginManager().getPermission(command.permission()) != null) { + GeyserImpl.getInstance().getLogger().debug("Skipping permission " + command.permission() + " as it is already registered"); + continue; + } + Bukkit.getPluginManager().addPermission(new Permission(command.permission(), GeyserLocale.getLocaleStringLog(command.description()), command.isSuggestedOpOnly() ? PermissionDefault.OP : PermissionDefault.TRUE)); } - - // Register permissions for extension commands - for (Map.Entry> commandEntry : this.geyserCommandManager.extensionCommands().entrySet()) { - for (Map.Entry entry : commandEntry.getValue().entrySet()) { - Command command = entry.getValue(); - if (command.aliases().contains(entry.getKey())) { - // Don't register aliases - continue; - } - - if (command.permission().isBlank()) { - continue; - } - - // Avoid registering the same permission twice, e.g. for the extension help commands - if (Bukkit.getPluginManager().getPermission(command.permission()) != null) { - GeyserImpl.getInstance().getLogger().debug("Skipping permission " + command.permission() + " as it is already registered"); - continue; - } - - Bukkit.getPluginManager().addPermission(new Permission(command.permission(), - GeyserLocale.getLocaleStringLog(command.description()), - command.isSuggestedOpOnly() ? PermissionDefault.OP : PermissionDefault.TRUE)); - } - } - - Bukkit.getPluginManager().addPermission(new Permission(Constants.UPDATE_PERMISSION, - "Whether update notifications can be seen", PermissionDefault.OP)); - - // Events cannot be unregistered - re-registering results in duplicate firings - GeyserSpigotBlockPlaceListener blockPlaceListener = new GeyserSpigotBlockPlaceListener(geyser, this.geyserWorldManager); - Bukkit.getServer().getPluginManager().registerEvents(blockPlaceListener, this); - - Bukkit.getServer().getPluginManager().registerEvents(new GeyserPistonListener(geyser, this.geyserWorldManager), this); - - Bukkit.getServer().getPluginManager().registerEvents(new GeyserSpigotUpdateListener(), this); } + Bukkit.getPluginManager().addPermission(new Permission(Constants.UPDATE_PERMISSION, + "Whether update notifications can be seen", PermissionDefault.OP)); + + // Events cannot be unregistered - re-registering results in duplicate firings + GeyserSpigotBlockPlaceListener blockPlaceListener = new GeyserSpigotBlockPlaceListener(geyser, this.geyserWorldManager); + Bukkit.getServer().getPluginManager().registerEvents(blockPlaceListener, this); + + Bukkit.getServer().getPluginManager().registerEvents(new GeyserPistonListener(geyser, this.geyserWorldManager), this); + + Bukkit.getServer().getPluginManager().registerEvents(new GeyserSpigotUpdateListener(), this); + boolean brigadierSupported = CommodoreProvider.isSupported(); geyserLogger.debug("Brigadier supported? " + brigadierSupported); if (brigadierSupported) { GeyserBrigadierSupport.loadBrigadier(this, geyserCommand); } - - // Check to ensure the current setup can support the protocol version Geyser uses - GeyserSpigotVersionChecker.checkForSupportedProtocol(geyserLogger, isViaVersion); - - INITIALIZED = true; } @Override - public void onDisable() { + public void onGeyserDisable() { + if (geyser != null) { + geyser.disable(); + } + } + + @Override + public void onGeyserShutdown() { if (geyser != null) { geyser.shutdown(); } @@ -376,6 +362,11 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { } } + @Override + public void onDisable() { + this.onGeyserShutdown(); + } + @Override public GeyserSpigotConfiguration getGeyserConfig() { return geyserConfig; @@ -470,4 +461,25 @@ public class GeyserSpigotPlugin extends JavaPlugin implements GeyserBootstrap { } return false; } + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + private boolean loadConfig() { + // This is manually done instead of using Bukkit methods to save the config because otherwise comments get removed + try { + if (!getDataFolder().exists()) { + //noinspection ResultOfMethodCallIgnored + getDataFolder().mkdir(); + } + File configFile = FileUtils.fileOrCopiedFromResource(new File(getDataFolder(), "config.yml"), "config.yml", + (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this); + this.geyserConfig = FileUtils.loadConfig(configFile, GeyserSpigotConfiguration.class); + } catch (IOException ex) { + getLogger().log(Level.SEVERE, GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex); + ex.printStackTrace(); + Bukkit.getPluginManager().disablePlugin(this); + return false; + } + + return true; + } } diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java index 9f2208ea8..039004867 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneBootstrap.java @@ -39,9 +39,9 @@ import org.apache.logging.log4j.core.Appender; import org.apache.logging.log4j.core.Logger; import org.apache.logging.log4j.core.appender.ConsoleAppender; import org.checkerframework.checker.nullness.qual.NonNull; -import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.GeyserBootstrap; import org.geysermc.geyser.GeyserImpl; +import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommandManager; import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.configuration.GeyserJacksonConfiguration; @@ -59,7 +59,12 @@ import java.lang.reflect.Method; import java.nio.file.Path; import java.nio.file.Paths; import java.text.MessageFormat; -import java.util.*; +import java.util.HashMap; +import java.util.List; +import java.util.Locale; +import java.util.Map; +import java.util.Set; +import java.util.UUID; import java.util.stream.Collectors; public class GeyserStandaloneBootstrap implements GeyserBootstrap { @@ -68,11 +73,10 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { private GeyserStandaloneConfiguration geyserConfig; private GeyserStandaloneLogger geyserLogger; private IGeyserPingPassthrough geyserPingPassthrough; - private GeyserStandaloneGUI gui; - @Getter private boolean useGui = System.console() == null && !isHeadless(); + private Logger log4jLogger; private String configFilename = "config.yml"; private GeyserImpl geyser; @@ -161,23 +165,19 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { } } } - bootstrap.onEnable(useGuiOpts, configFilenameOpt); - } - - public void onEnable(boolean useGui, String configFilename) { - this.configFilename = configFilename; - this.useGui = useGui; - this.onEnable(); + bootstrap.useGui = useGuiOpts; + bootstrap.configFilename = configFilenameOpt; + bootstrap.onGeyserInitialize(); } @Override - public void onEnable() { - Logger logger = (Logger) LogManager.getRootLogger(); - for (Appender appender : logger.getAppenders().values()) { + public void onGeyserInitialize() { + log4jLogger = (Logger) LogManager.getRootLogger(); + for (Appender appender : log4jLogger.getAppenders().values()) { // Remove the appender that is not in use // Prevents multiple appenders/double logging and removes harmless errors if ((useGui && appender instanceof TerminalConsoleAppender) || (!useGui && appender instanceof ConsoleAppender)) { - logger.removeAppender(appender); + log4jLogger.removeAppender(appender); } } @@ -190,7 +190,12 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { } LoopbackUtil.checkAndApplyLoopback(geyserLogger); - + + this.onGeyserEnable(); + } + + @Override + public void onGeyserEnable() { try { File configFile = FileUtils.fileOrCopiedFromResource(new File(configFilename), "config.yml", (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this); @@ -215,14 +220,15 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); // Allow libraries like Protocol to have their debug information passthrough - logger.get().setLevel(geyserConfig.isDebugMode() ? Level.DEBUG : Level.INFO); + log4jLogger.get().setLevel(geyserConfig.isDebugMode() ? Level.DEBUG : Level.INFO); geyser = GeyserImpl.load(PlatformType.STANDALONE, this); - GeyserImpl.start(); geyserCommandManager = new GeyserCommandManager(geyser); geyserCommandManager.init(); + GeyserImpl.start(); + if (gui != null) { gui.enableCommands(geyser.getScheduledThread(), geyserCommandManager); } @@ -250,7 +256,14 @@ public class GeyserStandaloneBootstrap implements GeyserBootstrap { } @Override - public void onDisable() { + public void onGeyserDisable() { + // We can re-register commands on standalone, so why not + GeyserImpl.getInstance().commandManager().getCommands().clear(); + geyser.disable(); + } + + @Override + public void onGeyserShutdown() { geyser.shutdown(); System.exit(0); } diff --git a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java index 3c29bc648..3a34920ce 100644 --- a/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java +++ b/bootstrap/standalone/src/main/java/org/geysermc/geyser/platform/standalone/GeyserStandaloneLogger.java @@ -49,7 +49,7 @@ public class GeyserStandaloneLogger extends SimpleTerminalConsole implements Gey @Override protected void shutdown() { - GeyserImpl.getInstance().getBootstrap().onDisable(); + GeyserImpl.getInstance().getBootstrap().onGeyserShutdown(); } @Override diff --git a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java index bd3d6085a..347a47d63 100644 --- a/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java +++ b/bootstrap/velocity/src/main/java/org/geysermc/geyser/platform/velocity/GeyserVelocityPlugin.java @@ -32,10 +32,10 @@ import com.velocitypowered.api.event.proxy.ListenerBoundEvent; import com.velocitypowered.api.event.proxy.ProxyInitializeEvent; import com.velocitypowered.api.event.proxy.ProxyShutdownEvent; import com.velocitypowered.api.network.ListenerType; +import com.velocitypowered.api.network.ProtocolVersion; import com.velocitypowered.api.plugin.Plugin; import com.velocitypowered.api.proxy.ProxyServer; import lombok.Getter; -import net.kyori.adventure.util.Codec; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; import org.geysermc.geyser.GeyserBootstrap; @@ -46,6 +46,7 @@ import org.geysermc.geyser.api.util.PlatformType; import org.geysermc.geyser.command.GeyserCommandManager; import org.geysermc.geyser.configuration.GeyserConfiguration; import org.geysermc.geyser.dump.BootstrapDumpInfo; +import org.geysermc.geyser.network.GameProtocol; import org.geysermc.geyser.ping.GeyserLegacyPingPassthrough; import org.geysermc.geyser.ping.IGeyserPingPassthrough; import org.geysermc.geyser.platform.velocity.command.GeyserVelocityCommandExecutor; @@ -63,12 +64,6 @@ import java.util.UUID; @Plugin(id = "geyser", name = GeyserImpl.NAME + "-Velocity", version = GeyserImpl.VERSION, url = "https://geysermc.org", authors = "GeyserMC") public class GeyserVelocityPlugin implements GeyserBootstrap { - - /** - * Determines if the plugin has been ran once before, including before /geyser reload. - */ - private static boolean INITIALIZED = false; - @Inject private Logger logger; @@ -90,52 +85,54 @@ public class GeyserVelocityPlugin implements GeyserBootstrap { private final Path configFolder = Paths.get("plugins/" + GeyserImpl.NAME + "-Velocity/"); @Override - public void onEnable() { - try { - Codec.class.getMethod("codec", Codec.Decoder.class, Codec.Encoder.class); - } catch (NoSuchMethodException e) { - // velocitypowered.com has a build that is very outdated - logger.error("Please download Velocity from https://papermc.io/downloads#Velocity - the 'stable' Velocity version " + - "that has likely been downloaded is very outdated and does not support 1.19."); - return; - } - + public void onGeyserInitialize() { GeyserLocale.init(this); - try { - if (!configFolder.toFile().exists()) - //noinspection ResultOfMethodCallIgnored - configFolder.toFile().mkdirs(); - File configFile = FileUtils.fileOrCopiedFromResource(configFolder.resolve("config.yml").toFile(), - "config.yml", (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this); - this.geyserConfig = FileUtils.loadConfig(configFile, GeyserVelocityConfiguration.class); - } catch (IOException ex) { - logger.error(GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex); - ex.printStackTrace(); - return; + if (!ProtocolVersion.isSupported(GameProtocol.getJavaProtocolVersion())) { + logger.error(" / \\"); + logger.error(" / \\"); + logger.error(" / | \\"); + logger.error(" / | \\ " + GeyserLocale.getLocaleStringLog("geyser.bootstrap.unsupported_proxy", proxyServer.getVersion().getName())); + logger.error(" / \\ " + GeyserLocale.getLocaleStringLog("geyser.may_not_work_as_intended_all_caps")); + logger.error(" / o \\"); + logger.error("/_____________\\"); } + if (!loadConfig()) { + return; + } this.geyserLogger = new GeyserVelocityLogger(logger, geyserConfig.isDebugMode()); GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); this.geyser = GeyserImpl.load(PlatformType.VELOCITY, this); - - // Hack: Normally triggered by ListenerBoundEvent, but that doesn't fire on /geyser reload - if (INITIALIZED) { - this.postStartup(); - } + this.geyserInjector = new GeyserVelocityInjector(proxyServer); } - private void postStartup() { - GeyserImpl.start(); - - if (!INITIALIZED) { - this.geyserInjector = new GeyserVelocityInjector(proxyServer); - // Will be initialized after the proxy has been bound + @Override + public void onGeyserEnable() { + if (GeyserImpl.getInstance().isReloading()) { + if (!loadConfig()) { + return; + } + this.geyserLogger.setDebug(geyserConfig.isDebugMode()); + GeyserConfiguration.checkGeyserConfiguration(geyserConfig, geyserLogger); + } else { + this.geyserCommandManager = new GeyserCommandManager(geyser); + this.geyserCommandManager.init(); } - this.geyserCommandManager = new GeyserCommandManager(geyser); - this.geyserCommandManager.init(); + GeyserImpl.start(); + + if (geyserConfig.isLegacyPingPassthrough()) { + this.geyserPingPassthrough = GeyserLegacyPingPassthrough.init(geyser); + } else { + this.geyserPingPassthrough = new GeyserVelocityPingPassthrough(proxyServer); + } + + // No need to re-register commands when reloading + if (GeyserImpl.getInstance().isReloading()) { + return; + } this.commandManager.register("geyser", new GeyserVelocityCommandExecutor(geyser, geyserCommandManager.getCommands())); for (Map.Entry> entry : this.geyserCommandManager.extensionCommands().entrySet()) { @@ -147,17 +144,18 @@ public class GeyserVelocityPlugin implements GeyserBootstrap { this.commandManager.register(entry.getKey().description().id(), new GeyserVelocityCommandExecutor(this.geyser, commands)); } - if (geyserConfig.isLegacyPingPassthrough()) { - this.geyserPingPassthrough = GeyserLegacyPingPassthrough.init(geyser); - } else { - this.geyserPingPassthrough = new GeyserVelocityPingPassthrough(proxyServer); - } - proxyServer.getEventManager().register(this, new GeyserVelocityUpdateListener()); } @Override - public void onDisable() { + public void onGeyserDisable() { + if (geyser != null) { + geyser.disable(); + } + } + + @Override + public void onGeyserShutdown() { if (geyser != null) { geyser.shutdown(); } @@ -188,26 +186,24 @@ public class GeyserVelocityPlugin implements GeyserBootstrap { @Subscribe public void onInit(ProxyInitializeEvent event) { - onEnable(); + this.onGeyserInitialize(); } @Subscribe public void onShutdown(ProxyShutdownEvent event) { - onDisable(); + this.onGeyserShutdown(); } @Subscribe public void onProxyBound(ListenerBoundEvent event) { if (event.getListenerType() == ListenerType.MINECRAFT) { // Once listener is bound, do our startup process - this.postStartup(); + this.onGeyserEnable(); if (geyserInjector != null) { // After this bound, we know that the channel initializer cannot change without it being ineffective for Velocity, too geyserInjector.initializeLocalChannel(this); } - - INITIALIZED = true; } } @@ -242,4 +238,21 @@ public class GeyserVelocityPlugin implements GeyserBootstrap { } return false; } + + @SuppressWarnings("BooleanMethodIsAlwaysInverted") + private boolean loadConfig() { + try { + if (!configFolder.toFile().exists()) + //noinspection ResultOfMethodCallIgnored + configFolder.toFile().mkdirs(); + File configFile = FileUtils.fileOrCopiedFromResource(configFolder.resolve("config.yml").toFile(), + "config.yml", (x) -> x.replaceAll("generateduuid", UUID.randomUUID().toString()), this); + this.geyserConfig = FileUtils.loadConfig(configFile, GeyserVelocityConfiguration.class); + } catch (IOException ex) { + logger.error(GeyserLocale.getLocaleStringLog("geyser.config.failed"), ex); + ex.printStackTrace(); + return false; + } + return true; + } } diff --git a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java index 4dbc1dca3..a9414d9d0 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserBootstrap.java @@ -44,14 +44,28 @@ public interface GeyserBootstrap { GeyserWorldManager DEFAULT_CHUNK_MANAGER = new GeyserWorldManager(); /** - * Called when the GeyserBootstrap is enabled + * Called when the GeyserBootstrap is initialized. + * This will only be called once, when Geyser is loading. Calling this must + * happen before {@link #onGeyserEnable()}, since this "sets up" Geyser. */ - void onEnable(); + void onGeyserInitialize(); /** - * Called when the GeyserBootstrap is disabled + * Called when the GeyserBootstrap is enabled/reloaded. + * This starts Geyser, after which, Geyser is in a player-accepting state. */ - void onDisable(); + void onGeyserEnable(); + + /** + * Called when the GeyserBootstrap is disabled - either before a reload, + * of before fully shutting down. + */ + void onGeyserDisable(); + + /** + * Called when the GeyserBootstrap is shutting down. + */ + void onGeyserShutdown(); /** * Returns the current GeyserConfiguration diff --git a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java index e9ea08260..5ed0c3947 100644 --- a/core/src/main/java/org/geysermc/geyser/GeyserImpl.java +++ b/core/src/main/java/org/geysermc/geyser/GeyserImpl.java @@ -58,9 +58,7 @@ import org.geysermc.floodgate.news.NewsItemAction; import org.geysermc.geyser.api.GeyserApi; import org.geysermc.geyser.api.event.EventBus; import org.geysermc.geyser.api.event.EventRegistrar; -import org.geysermc.geyser.api.event.lifecycle.GeyserPostInitializeEvent; -import org.geysermc.geyser.api.event.lifecycle.GeyserPreInitializeEvent; -import org.geysermc.geyser.api.event.lifecycle.GeyserShutdownEvent; +import org.geysermc.geyser.api.event.lifecycle.*; import org.geysermc.geyser.api.network.AuthType; import org.geysermc.geyser.api.network.BedrockListener; import org.geysermc.geyser.api.network.RemoteServer; @@ -145,6 +143,7 @@ public class GeyserImpl implements GeyserApi { private UnixSocketClientListener erosionUnixListener; + @Setter private volatile boolean shuttingDown = false; private ScheduledExecutorService scheduledThread; @@ -162,8 +161,14 @@ public class GeyserImpl implements GeyserApi { @Getter(AccessLevel.NONE) private Map savedRefreshTokens; + @Getter private static GeyserImpl instance; + /** + * Determines if we're currently reloading. Replaces per-bootstrap reload checks + */ + private volatile boolean isReloading; + private GeyserImpl(PlatformType platformType, GeyserBootstrap bootstrap) { instance = this; @@ -172,13 +177,16 @@ public class GeyserImpl implements GeyserApi { this.platformType = platformType; this.bootstrap = bootstrap; - GeyserLocale.finalizeDefaultLocale(this); - /* Initialize event bus */ this.eventBus = new GeyserEventBus(); - /* Load Extensions */ + /* Create Extension Manager */ this.extensionManager = new GeyserExtensionManager(); + + /* Finalize locale loading now that we know the default locale from the config */ + GeyserLocale.finalizeDefaultLocale(this); + + /* Load Extensions */ this.extensionManager.init(); this.eventBus.fire(new GeyserPreInitializeEvent(this.extensionManager, this.eventBus)); } @@ -236,11 +244,17 @@ public class GeyserImpl implements GeyserApi { } else if (config.getRemote().authType() == AuthType.FLOODGATE) { VersionCheckUtils.checkForOutdatedFloodgate(logger); } + + VersionCheckUtils.checkForOutdatedJava(logger); } private void startInstance() { this.scheduledThread = Executors.newSingleThreadScheduledExecutor(new DefaultThreadFactory("Geyser Scheduled Thread")); + if (isReloading) { + // If we're reloading, the default locale in the config might have changed. + GeyserLocale.finalizeDefaultLocale(this); + } GeyserLogger logger = bootstrap.getGeyserLogger(); GeyserConfiguration config = bootstrap.getGeyserConfig(); @@ -536,12 +550,15 @@ public class GeyserImpl implements GeyserApi { newsHandler.handleNews(null, NewsItemAction.ON_SERVER_STARTED); - this.eventBus.fire(new GeyserPostInitializeEvent(this.extensionManager, this.eventBus)); + if (isReloading) { + this.eventBus.fire(new GeyserPostReloadEvent(this.extensionManager, this.eventBus)); + } else { + this.eventBus.fire(new GeyserPostInitializeEvent(this.extensionManager, this.eventBus)); + } + if (config.isNotifyOnNewBedrockUpdate()) { VersionCheckUtils.checkForGeyserUpdate(this::getLogger); } - - VersionCheckUtils.checkForOutdatedJava(logger); } @Override @@ -600,9 +617,8 @@ public class GeyserImpl implements GeyserApi { return session.transfer(address, port); } - public void shutdown() { + public void disable() { bootstrap.getGeyserLogger().info(GeyserLocale.getLocaleStringLog("geyser.core.shutdown")); - shuttingDown = true; if (sessionManager.size() >= 1) { bootstrap.getGeyserLogger().info(GeyserLocale.getLocaleStringLog("geyser.core.shutdown.kick.log", sessionManager.size())); @@ -616,7 +632,6 @@ public class GeyserImpl implements GeyserApi { skinUploader.close(); } newsHandler.shutdown(); - this.commandManager().getCommands().clear(); if (this.erosionUnixListener != null) { this.erosionUnixListener.close(); @@ -624,16 +639,29 @@ public class GeyserImpl implements GeyserApi { Registries.RESOURCE_PACKS.get().clear(); + bootstrap.getGeyserLogger().info(GeyserLocale.getLocaleStringLog("geyser.core.shutdown.done")); + } + + public void shutdown() { + shuttingDown = true; + this.disable(); + this.commandManager().getCommands().clear(); + + // Disable extensions, fire the shutdown event this.eventBus.fire(new GeyserShutdownEvent(this.extensionManager, this.eventBus)); this.extensionManager.disableExtensions(); bootstrap.getGeyserLogger().info(GeyserLocale.getLocaleStringLog("geyser.core.shutdown.done")); } - public void reload() { - shutdown(); - this.extensionManager.enableExtensions(); - bootstrap.onEnable(); + public void reloadGeyser() { + isReloading = true; + this.eventBus.fire(new GeyserPreReloadEvent(this.extensionManager, this.eventBus)); + + bootstrap.onGeyserDisable(); + bootstrap.onGeyserEnable(); + + isReloading = false; } /** @@ -744,9 +772,7 @@ public class GeyserImpl implements GeyserApi { throw new RuntimeException("Geyser has not been loaded yet!"); } - // We've been reloaded - if (instance.isShuttingDown()) { - instance.shuttingDown = false; + if (getInstance().isReloading()) { instance.startInstance(); } else { instance.initialize(); @@ -797,8 +823,4 @@ public class GeyserImpl implements GeyserApi { } }); } - - public static GeyserImpl getInstance() { - return instance; - } } diff --git a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java index d646845c7..72ed22381 100644 --- a/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java +++ b/core/src/main/java/org/geysermc/geyser/command/GeyserCommandManager.java @@ -86,7 +86,7 @@ public class GeyserCommandManager { registerBuiltInCommand(new StopCommand(geyser, "stop", "geyser.commands.stop.desc", "geyser.command.stop")); } - if (this.geyser.extensionManager().extensions().size() > 0) { + if (!this.geyser.extensionManager().extensions().isEmpty()) { registerBuiltInCommand(new ExtensionsCommand(this.geyser, "extensions", "geyser.commands.extensions.desc", "geyser.command.extensions")); } diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java index a3cd8fa4c..987860238 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/ReloadCommand.java @@ -55,7 +55,7 @@ public class ReloadCommand extends GeyserCommand { geyser.getSessionManager().disconnectAll("geyser.commands.reload.kick"); //FIXME Without the tiny wait, players do not get kicked - same happens when Geyser tries to disconnect all sessions on shutdown - geyser.getScheduledThread().schedule(geyser::reload, 10, TimeUnit.MILLISECONDS); + geyser.getScheduledThread().schedule(geyser::reloadGeyser, 10, TimeUnit.MILLISECONDS); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java b/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java index 7db539cc5..1cd3050c9 100644 --- a/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java +++ b/core/src/main/java/org/geysermc/geyser/command/defaults/StopCommand.java @@ -52,7 +52,7 @@ public class StopCommand extends GeyserCommand { return; } - geyser.getBootstrap().onDisable(); + geyser.getBootstrap().onGeyserShutdown(); } @Override diff --git a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java index df5eb36f7..59485b2cd 100644 --- a/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java +++ b/core/src/main/java/org/geysermc/geyser/network/UpstreamPacketHandler.java @@ -166,7 +166,7 @@ public class UpstreamPacketHandler extends LoggingPacketHandler { @Override public PacketSignal handle(LoginPacket loginPacket) { - if (geyser.isShuttingDown()) { + if (geyser.isShuttingDown() || geyser.isReloading()) { // Don't allow new players in if we're no longer operating session.disconnect(GeyserLocale.getLocaleStringLog("geyser.core.shutdown.kick.message")); return PacketSignal.HANDLED; diff --git a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java index 8c1ef5296..395eb9576 100644 --- a/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java +++ b/core/src/main/java/org/geysermc/geyser/scoreboard/ScoreboardUpdater.java @@ -62,7 +62,7 @@ public final class ScoreboardUpdater extends Thread { @Override public void run() { - while (!geyser.isShuttingDown()) { + while (!geyser.isShuttingDown() && !geyser.isReloading()) { try { long timeTillAction = getTimeTillNextAction(); if (timeTillAction > 0) { diff --git a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java index 583e15c23..f040fd0ba 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -266,6 +266,7 @@ public final class EntityUtils { * Convert Java GameMode to Bedrock GameType * Needed to account for ordinal differences (spectator is 3 in Java, 6 in Bedrock) */ + @SuppressWarnings("deprecation") // Must use survival_viewer due to limitations on Bedrock's spectator gamemode public static GameType toBedrockGamemode(GameMode gamemode) { return switch (gamemode) { case CREATIVE -> GameType.CREATIVE; From e97258f6253291d4d7a03c13fc6a39c462545e8d Mon Sep 17 00:00:00 2001 From: byquanton <32410361+byquanton@users.noreply.github.com> Date: Thu, 15 Feb 2024 14:57:51 +0100 Subject: [PATCH 85/86] Fix: Nametags not showing up after respawn (#4445) --- .../org/geysermc/geyser/entity/type/player/PlayerEntity.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java index 3578ac82b..c3b04402b 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java @@ -377,6 +377,7 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { if (needsUpdate) { dirtyMetadata.put(EntityDataTypes.NAME, this.nametag); + dirtyMetadata.put(EntityDataTypes.NAMETAG_ALWAYS_SHOW, (byte) 1); } } From 8b170d656e6842df0ca02c394c2355ebcfbf69ef Mon Sep 17 00:00:00 2001 From: byquanton <32410361+byquanton@users.noreply.github.com> Date: Thu, 15 Feb 2024 22:22:46 +0100 Subject: [PATCH 86/86] Fix: Nametags are not shown in some other cases (#4447) --- .../geysermc/geyser/entity/type/player/PlayerEntity.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java index c3b04402b..9e3888138 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/player/PlayerEntity.java @@ -120,9 +120,6 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { super.initializeMetadata(); // For the OptionalPack, set all bits as invisible by default as this matches Java Edition behavior dirtyMetadata.put(EntityDataTypes.MARK_VARIANT, 0xff); - // Since 1.20.60, the nametag does not show properly if this is not set :/ - // The nametag does disappear properly when the player is invisible though. - dirtyMetadata.put(EntityDataTypes.NAMETAG_ALWAYS_SHOW, (byte) 1); } @Override @@ -154,6 +151,10 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { addPlayerPacket.setGameType(GameType.SURVIVAL); //TODO addPlayerPacket.setAbilityLayers(BASE_ABILITY_LAYER); // Recommended to be added since 1.19.10, but only needed here for permissions viewing addPlayerPacket.getMetadata().putFlags(flags); + + // Since 1.20.60, the nametag does not show properly if this is not set :/ + // The nametag does disappear properly when the player is invisible though. + dirtyMetadata.put(EntityDataTypes.NAMETAG_ALWAYS_SHOW, (byte) 1); dirtyMetadata.apply(addPlayerPacket.getMetadata()); setFlagsDirty(false); @@ -377,7 +378,6 @@ public class PlayerEntity extends LivingEntity implements GeyserPlayerEntity { if (needsUpdate) { dirtyMetadata.put(EntityDataTypes.NAME, this.nametag); - dirtyMetadata.put(EntityDataTypes.NAMETAG_ALWAYS_SHOW, (byte) 1); } }